如何让 Rollup 转换 require() 调用?

How to get Rollup to transform require() calls?

我正在尝试使用 Rollup 构建我的项目。我得到了它的大部分工作(包括 Angular 2),但我无法转换我的一些 polyfill,因为它们在其中调用了 require()。即使使用 rollup-plugin-node-resolverollup-plugin-commonjs,它也根本不会触及 require

那么我该如何改造它们呢?我可以使用的解决方法是浏览器化 polyfill,然后在汇总过程中包含浏览器化的包,但这需要大量额外的插件并且不是一个干净的解决方案,特别是因为我认为汇总应该能够理解CommonJS.

这是 Node.js 的一些测试代码:

"use strict";
let rollup = require("rollup");
let fs = require("fs");
let resolve = require("rollup-plugin-node-resolve");
let commonjs = require("rollup-plugin-commonjs");

rollup.rollup({
    entry: "src/main.js",
    plugins: [
        resolve({
            jsnext: true,
            main: true
        }),
        commonjs({
            include: '**', // also tried src/** node_modules/** and a lot of other stuff. 
                           // Leaving this undefined stops rollup from working
        }),
    ]
}).then(function(bundle) {
    bundle.write({
        format: "iife",
        dest: "www/bundle.js"
    })
});

然后使用一个简单的文件 src/main.js,它只包含行 require("./some-file.js"); 和一个包含任何内容的 src/some-file.js 来演示问题。

我在 rollup-gitter 的好心人的帮助下解决了它。

我需要将 moduleName 添加到 bundle.write 选项,如下所示:

bundle.write({
    format: "iife",
    dest: "www/bundle.js"
    moduleName: "someModule"
})