我的节点webpack项目使用三个babel库。这些以及如何使用它们之间的区别是什么?
"dependencies": {
"babel-runtime": "^5.8.24"
}
"dev-dependencies": {
"babel": "^5.8.23",
"babel-core": "^5.8.23"
}
答案 0 :(得分:44)
babel-core
是API。对于v5,babel
包是CLI,取决于babel-core
。对于v6,babel-cli
包是CLI(CLI bin命令仍为babel
),babel
包不执行任何操作。 babel-runtime
我想只是运行时(polyfill和helpers)来支持已经转换过的代码。
答案 1 :(得分:20)
TL; DR这里要比较的事情是:
来自https://babeljs.io/blog/2015/10/31/setting-up-babel-6:
巴贝尔包裹已不复存在。以前,它是整个编译器和所有转换以及一堆CLI工具,但这导致不必要的大量下载并且有点令人困惑。现在我们将它分成两个独立的包:babel-cli和babel-core。
npm install --global babel-cli
或
npm install --save-dev babel-core
如果您想使用CLI中的Babel,您可以安装babel-cli,或者如果您想使用Node API,您可以安装babel-core。
babel-runtime只允许不污染全局空间的polyfill,而不像babel-polyfill污染全局空间。来自http://babeljs.io/docs/plugins/transform-runtime/:
[babel-runtime]自动填充代码而不会污染全局变量。 (建议在库/工具中使用此插件)
如果你使用babel-runtime,你也应该
npm install --save-dev babel-plugin-transform-runtime
在大多数情况下,您应该将babel-plugin-transform-runtime作为开发依赖项(使用--save-dev)和babel-runtime作为生产依赖项(使用--save)安装。
转换插件通常仅用于开发,但运行时本身将取决于您部署/发布的代码。
此外,babel-runtime + babel-plugin-transform-runtime和babel-polyfill通常是互斥的 - 这意味着你应该只使用其中一个。来自此处的评论http://jamesknelson.com/the-six-things-you-need-to-know-about-babel-6/:
你应该使用babel-polyfill或babel-runtime。它们是相互排斥的 - 除非你当然知道你在做什么。但它们基本上是一回事。这些只是帮手。 babel-polyfill通过改变全局变量实现了相同的目标,而babel-runtime则模块化地实现了同样的目标。除非您正在开发库,否则我建议您使用polyfill。
答案 2 :(得分:0)
The Six Things You Need To Know About Babel 6很好地解释了这一点
babel npm软件包不再存在。相反,通天塔已经分裂 分成多个包:
babel-cli,其中包含babel命令行界面babel-core, 包含Node API并需要钩子babel-polyfill, 在需要时,为您提供完整的ES2015式环境,以避免 意外冲突,请确保删除以前的Babel软件包 例如package.json中的babel,babel-core等,然后是npm 卸载它们。