2016-10-05 53 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" 
})