如何在 RollupJs 输出中动态捆绑 module/object?

How to dynamically bundle module/object in RollupJs output?

如何将 module/object 动态捆绑到我的 RollupJs 输出文件中?我尝试了很多不同的选项,但无法获得我正在寻找的预期输出。

我在下面整理了一个简短的示例项目,以帮助说明我在寻找什么。预期的输出应该从作为依赖项动态注入的 overrideApp 对象打印 "Hello John Doe"。

src/app.js

export default {
  sayHello: function() {
    console.log('Hello Mr.Roboto')
  },
  sayGoodBye: function() {
    console.log('Goodbye Mr.Roboto')
  }
}

index.js

import app from './src/app.js'
import overrideApp from 'overrideApp'
export default { ...app, ...overrideApp }.sayHello()

.rollup.config.js

let overrideApp = {
  sayHello: function() {
    console.log('Hello John Doe')
  }
}
export default [
  {
    input: 'index.js',
    external: ['overrideApp'], // This is not working, expecting to pass overrideApp to index.js
    output: {
      file: './dist/app.js',
      format: 'umd',
      name: 'bundle',
    }
  }
]

这是完全正确的,你在这里混合了很多不能一起工作的东西。

您正在寻找虚拟模块

安装

npm install @rollup/plugin-virtual --save-dev

用法

注。 任何其他插件(例如 node-resolve 或 commonjs)之前使用此插件,因此它们不会改变输出。

假设包含以下代码段的条目文件存在于 src/entry.js,并尝试从内存中加载 batmansrc/robin.js

// src/entry.js
import batman from 'batman';
import robin from './robin.js';

console.log(batman, robin);

创建一个rollup.config.js configuration file并导入插件:

import virtual from '@rollup/plugin-virtual';

export default {
  entry: 'src/entry.js',
  // ...
  plugins: [
    virtual({
      batman: `export default 'na na na na na'`,
      'src/robin.js': `export default 'batmannnnn'`
    })
  ]
};

https://github.com/rollup/plugins/edit/master/packages/virtual