#rollup #deno
#rollup #deno
Вопрос:
У меня есть следующий код Deno…
import rollup from "https://unpkg.com/rollup/dist/es/rollup.js";
const inputOptions = {
input: "./index.mjs"
}
const outputOptions = {
format: "esm",
sourcemap: "inline"
}
const build = async ()=>{
const bundle = await rollup.rollup(inputOptions);
const { output } = await bundle.generate(outputOptions);
for (const chunkOrAsset of output) {
if (chunkOrAsset.type === 'asset') {
console.log('Asset', chunkOrAsset);
} else{
console.log('Chunk', chunkOrAsset.modules);
}
}
}
Но когда я пытаюсь запустить, я получаю…
ошибка: относительный путь импорта «path» не имеет префикса / или ./ или ../ Импортировано из «https://unpkg.com/rollup@2.26.11/dist/es/rollup.js «
Я также пытался
import rollup from "https://unpkg.com/rollup";
но я получаю…
ошибка: неперехваченная ошибка синтаксиса: запрошенный модуль ‘https://unpkg.com/rollup ‘ не предоставляет экспорт с именем ‘default’
наконец я попробовал…
import * as rollup from "https://unpkg.com/rollup";
Но я получаю…
error: Uncaught ReferenceError: exports is not defined
Object.defineProperty(exports, '__esModule', { value: true });
Как мне заставить rollup работать с Deno?
Комментарии:
1. Не уверен, что это работает, но попробуйте добавить к строке префикс
// @ts-ignore
2. Короткий ответ — вы не можете. Rollup использует модуль ввода-вывода, подобный
fs
иpath
, который доступен только в Nodejs. Если вы не нашли способ вставить / заполнить эти модули.3. nodejs != deno; они не должны быть совместимы. Вам нужно подождать, пока rollup не будет перенесен на deno.
Ответ №1:
Попытка перенести rollup на Deno была начата в январе 2021 года, так что теперь эта проблема разрешима. Вы можете импортировать модуль deno-rollup и затем использовать его с тем же API, что и rollup.
Вот версия вашего исходного кода, которая выполняется под управлением Deno:
import { rollup } from "https://deno.land/x/drollup@2.42.3+0.17.1/mod.ts";
const bundle = await rollup({
input: "./index.mjs",
});
const { output } = await bundle.generate({
format: "esm",
sourcemap: "inline",
});
for (const chunkOrAsset of output) {
if (chunkOrAsset.type === "asset") {
console.log("Asset", chunkOrAsset);
} else {
console.log("Chunk", chunkOrAsset.modules);
}
}
Вы можете найти несколько примеров использования порта deno-rollup в их репозитории:https://github.com/cmorten/deno-rollup
Пожалуйста, обратите внимание, что API компиляции во время выполнения Deno считается нестабильным API, что означает, что вы должны использовать --unstable
флаг при запуске Deno, чтобы сделать его доступным. Например: deno run --unstable --allow-read=. build.ts