Как мне заставить rollup компилироваться во время выполнения с помощью Deno?

#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