如何在格式化时处理全局问题'?

时间:2017-10-04 22:58:17

标签: rollupjs

我已将Javascript库(incremental-dom)标识为全局和外部。我在脚本标记中加载库。

当汇总格式为“生日”时图书馆注入了生活,一切正常。

然而,当我使用' es'格式,从不引用全局,浏览器抛出类型错误:

Uncaught TypeError: Failed to resolve module specifier 'incremental-dom'

这是我的rollup.config.js文件:



const path = require('path');
const root = process.cwd();
const string = require('rollup-plugin-string');
const superviews = require('rollup-plugin-superviews');

export default [
  {
    input: path.resolve(root, 'src', 'idx-admin-tab', 'component.js'),
    plugins: [
      superviews({include: 'src/**/*.html'}),
      string({include: ['src/**/*.css', 'src/**/*.svg']})
    ],
    globals: {'incremental-dom': 'IncrementalDOM'},
    external: ['incremental-dom'],
    output: {
      file: path.resolve(root, 'dist', 'idx-admin-tab.es.js'),
      format: 'es'
    }
  }
];




1 个答案:

答案 0 :(得分:1)

globals仅适用于iifeumd输出的上下文 - 如果您要创建es套装,则只会忽略它。

如果您只想使用浏览器的原生import支持,则必须将模块说明符incremental-dom转换为浏览器可以解析的一个 - 如下所示:

export default [
  {
    // ...
    external: ['incremental-dom'],
    paths: {
      'incremental-dom': '/node_modules/incremental-dom/dist/incremental-dom.js'
    },
    // ...
  }
];

遗憾的是,incremental-dom没有ESM版本,所以你不能import它。因此,如果您不想捆绑它,即使在IncrementalDOM模式下,您也必须欺骗Rollup使用全局es

您应该可以使用rollup-plugin-virtual执行此操作:

export default [
  {
    // ...
    plugins: [
      superviews({include: 'src/**/*.html'}),
      string({include: ['src/**/*.css', 'src/**/*.svg']}),
      virtual({
        'incremental-dom': 'export default window.IncrementalDOM'
      })
    ],
    // ...
  }
];