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

时间:2016-10-05 08:42:25

标签: javascript rollup

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

那么我怎样才能改变它们呢?我可以使用的解决方法是浏览化polyfill,然后在汇总过程中包含浏览器化的包,但这需要大量额外的插件,并不是一个干净的解决方案,特别是因为我认为Rollup应该能够了解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的{​​{1}}的简单文件和包含任何内容的require("./some-file.js");来证明问题。

1 个答案:

答案 0 :(得分:2)

我在rollup-gitter的好人的帮助下解决了这个问题。

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

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