【问题标题】:Bundle CommonJS files for Node.js为 Node.js 捆绑 CommonJS 文件
【发布时间】:2016-08-22 19:51:59
【问题描述】:

我有一个 Node.js 应用程序,其中所有模块都是用 CommonJS 编写的,还有一些使用 es6 功能,例如生成器、let、const 等。这一切都可以正常工作。

我想将所有这些文件捆绑到一个文件中,然后将其丑化。我对必要步骤的最佳猜测是: 1) 将所有模块转换为 es6 模块 - 使用 Babel 2) 使用 rollup 创建 bundle 并将其输出为 CJS 文件。 3) 丑化这个 CJS 文件。

我玩过 rollup 和 babel 并阅读过诸如 https://duske.me/easy-es2015-compilation-with-rollup-js-and-gulp-js/ 之类的文章,如果输入模块已经是 es6 模块,它可以正常工作。我也看过https://github.com/rollup/rollup-plugin-babel,但因为我在 babel、rollup 等方面没有太多经验而陷入困境。

【问题讨论】:

    标签: javascript node.js babeljs commonjs rollupjs


    【解决方案1】:

    我不会尝试将 CommonJS 模块转换为 ES6。可以做到(esnext 可能是你最好的选择——我不相信 Babel 有从 CommonJS 到 ES6 的插件),但你可能会遇到一些粗糙的边缘,CommonJS 的语义与语义不太匹配ES6 模块。

    为什么不首先编写 ES6 模块呢?这样一来,您的应用就更加面向未来,并且捆绑的行为更加可预测。

    如果这不是一个选项,并且您的源文件需要是 CommonJS,那么您最好使用 CommonJS 捆绑器,例如 Webpack 或 Browserify。

    【讨论】:

    • 谢谢里奇。我目前有 31 个 CJS 格式的文件,我不愿意花时间和精力重构为 es6 模块(但可能必须这样做)。对于新代码,我正在编写 es6 模块,几个月前我在浏览器中从 Require.js 切换并喜欢它后开始使用 JSPM/System.js。我会看看 esnext,这可能是一个足够好的解决方法。我也会看看 Webpack。希望有一天我们能在 node.js 中获得原生 es6 模块支持
    【解决方案2】:

    这在 babel 5 中是可能的,但是从 babel 6 开始,您需要一个插件来为 CommonJS 模块使用普通的 require('module') 而不是“新” require('module').default

    这里是 babel 插件:https://www.npmjs.com/package/babel-plugin-add-module-exports

    【讨论】:

    • 谢谢,但我不明白这如何帮助我从 cjs 转换为 es6 模块。
    • 你不需要转换任何东西来让它工作
    猜你喜欢
    • 1970-01-01
    • 2015-03-31
    • 2012-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多