babel vs babel-core vs babel-runtime

时间:2015-09-12 23:10:48

标签: babeljs

我的节点webpack项目使用三个babel库。这些以及如何使用它们之间的区别是什么?

"dependencies": {
  "babel-runtime": "^5.8.24"
}

"dev-dependencies": {
  "babel": "^5.8.23",
  "babel-core": "^5.8.23"
}

3 个答案:

答案 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这里要比较的事情是:

  1. babel(用于5.x.x)vs babel-cli + babel-core(为6.x.x选择一个)
  2. babel-polyfill(用于非库)vs babel-runtime + babel-plugin-transform-runtime(用于库)
  3. 来自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   卸载它们。