2016-04-28 29 views
3

我有一個Node.js應用程序,所有模塊都使用CommonJS編寫,有些使用es6功能,比如生成器,let,const等等。而且這一切都正常。爲Node.js打包CommonJS文件

我想將所有這些文件打包成一個文件,然後uglify。我最好猜測的必要步驟是: 1)將所有模塊轉換爲es6模塊 - 使用Babel 2)使用匯總來創建包並將其輸出爲CJS文件。 3)Uglify這個CJS文件。

我玩過彙總& babel,並閱讀過文章,如https://duske.me/easy-es2015-compilation-with-rollup-js-and-gulp-js/,如果輸入模塊已經是es6模塊,它可以正常工作。我已經看了https://github.com/rollup/rollup-plugin-babel,但我很掙扎,因爲我沒有太多的經驗與babel,rollup等

回答

1

我不會嘗試將CommonJS模塊轉換爲ES6。它可以做到(esnext可能是你最好的選擇 - 我不相信Babel有一個從CommonJS到ES6的插件),但是你可能會遇到一些粗糙的邊緣,CommonJS的語義與ES6的語義不太匹配模塊。

爲什麼不直接寫ES6模塊呢?這樣,您的應用程序更具前瞻性,捆綁的行爲將更具可預測性。

如果這不是一個選項,並且您的源文件需要是CommonJS,那麼最好使用CommonJS捆綁軟件,如Webpack或Browserify。

+0

感謝豐富。我目前有31個CJS格式的文件,我不願花時間和精力重構es6模塊(但可能不得不)。 對於新代碼,我正在編寫es6模塊,並且在瀏覽器中,我從幾個月前開始使用JSPM/System.js,然後從Require.js切換並喜歡它。 我會看看esnext,現在可能是一個足夠好的解決方法。我也會看看Webpack。 希望有一天我們會在node.js中獲得原生es6模塊支持 – nevf

0

這是可能的巴貝爾5,但由於巴貝爾6,你需要一個插件來使用普通require('module')爲CommonJS的模塊,而不是「新」 require('module').default

這巴貝爾插件是:https://www.npmjs.com/package/babel-plugin-add-module-exports

+0

謝謝,但我看不出如何幫助我從cjs轉換爲es6模塊。 – nevf

+0

你不需要轉換任何東西來讓它工作 – kromit