Разрешение динамического модуля свертки - PullRequest
0 голосов
/ 02 декабря 2019

Я пытаюсь использовать Rollup , чтобы объединить несколько JS в один файл. Однако путь к одному из файлов, который я хотел бы import, известен только во время компиляции, и поэтому мне нужно указать Rollup, как его найти.

Вот мой основной файл:

import * as commands from 'command-loader';

console.log(commands);

Вы можете видеть, что он импортирует все из command-loader. Имя и содержимое файла не важны, мне просто нужно, чтобы его содержимое было включено в основной файл. Этот файл выглядит примерно так:

export function exampleCommand() {
  console.log('Running command...');
}

Ошибка накопления достаточно очевидна: он не знает, как найти command-loader: 'command-loader' is imported by ../index.js, but could not be resolved – treating it as an external dependency.

Я знаю, что мог бы, вероятно,просто прочитайте содержимое файла команд и добавьте его к основному файлу, но это неудобно, так как мне придется удалить export из файла команд и определить объект «команды», и это, вероятно, противоречит целиRollup.

Я пытался использовать rollup-plugin-node-resolve, чтобы сообщить Rollup, как найти command-loader, но, похоже, это не сработало (предоставлено, я не знаю плагин, которыйхорошо).

const rollup = require('rollup');
const resolve = require('rollup-plugin-node-resolve');

await rollup.rollup({
  input: mainFilePath,
  plugins: [
    resolve({
      'command-loader': dynamicFilePath
    })
  ]
});

Я также пытался использовать rollup-plugin-bundle-imports безрезультатно.

const rollup = require('rollup');
const { bundleImports } = require('rollup-plugin-bundle-imports');

await rollup.rollup({
  input: mainFilePath,
  plugins: [
    bundleImports({
      include: [dynamicFilePath],
      importAs: 'command-loader',
    })
  ]
});

Возможно, я выбрал неправильный подход. Если есть лучший способ динамически import файла во время компиляции, я бы хотел узнать об этом.

1 Ответ

1 голос
/ 03 декабря 2019

Понял: @rollup/plugin-alias

Плагин Rollup для определения псевдонимов при объединении пакетов.

Вот код, который я использовал в итоге:

const rollup = require('rollup');
const alias = require('@rollup/plugin-alias');

await rollup.rollup({
  input: mainFilePath,
  plugins: [
    alias({
      entries: {
        'command-loader': dynamicFilePath
      }
    })
  ]
});

Это, в сочетании с выходным форматом CJS, анализирует приведенный выше пример кода и выдает:

'use strict';

function exampleCommand() {
  console.log('Running command...');
}

var commands = /*#__PURE__*/Object.freeze({
  __proto__: null,
  exampleCommand: exampleCommand
});

console.log(commands);

Success!

...