2016-04-28 51 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