2016-10-05 47 views
2

我正在尝试使用Rollup构建我的项目。我大部分工作(包括Angular 2),但我无法改变我的一些polyfills,因为他们打电话给他们require()。即使使用rollup-plugin-node-resolverollup-plugin-commonjs,它也根本不会触及require如何获得Rollup转换require()调用?

那么我该如何转换它们呢?我可以使用的一种解决方法是Browserify polyfills,然后在汇总过程中包含browserified bundle,但这需要大量额外的插件,并不完全是一个干净的解决方案,特别是因为我认为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只包含行require("./some-file.js");和包含任何一个src/some-file.js演示了此问题。

回答

2

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

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

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