babel vs babel-core vs babel-runtime

64

我的Node Webpack项目使用了三个Babel库。这些库有什么区别,它们如何被使用?

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

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

2
如果你四处查看,所有的文档都在这里:https://babeljs.io/docs/usage/api/,https://babeljs.io/docs/usage/runtime/,https://babeljs.io/docs/usage/cli/。 - Felix Kling
2
运行时文档链接指向 404。 - Kev
3
对于如此广泛使用的库而言,文档质量相当糟糕。不过,好的内容实际上在代码中内嵌了,但是如果你不知道实际上需要使用什么,那就没有用处。 - theflowersoftime
3个回答

46

babel-core 是API接口,对于版本5来说,babel 包是CLI命令的依赖,并且依赖于 babel-core。而对于版本6来说,babel-cli 是CLI命令,并且CLI二进制命令仍然为 babel,而 babel 包则不再扮演任何角色。我猜测 babel-runtime 只是运行时环境(填充和辅助程序),用于支持已经被转换的代码。


还有一个问题:在我的项目中,我应该使用什么来配合webpack? - just-boris
@just-boris 请查看 http://babeljs.io/docs/setup/#webpack 以及插件自述文件中关于同级依赖的注意事项。还可以参考 @FelixKling 发布的有关可选运行时转换器的链接。 - JMM
对于那些对babel-runtimebabel-polyfill之间的区别感兴趣的人,请参考以下链接:https://dev59.com/TlwZ5IYBdhLWcg3wJ9jN - user1429007
@JMM,最近我对依赖项@babel/core和babel-core感到困惑。它们有什么区别? - Ben Cheng

21

简述:需要比较的内容包括:

  1. babel(适用于5.x.x版本)与babel-cli+babel-core(选择其中一个,适用于6.x.x版本)
  2. babel-polyfill(适用于非库项目)与babel-runtime+babel-plugin-transform-runtime(适用于库项目)

https://babeljs.io/blog/2015/10/31/setting-up-babel-6了解到:

现在,我们将它分成了两个不同的包:babel-cli和babel-core。

如果你想要使用Babel CLI,则可以安装babel-cli;如果你想要使用Node API,可以安装babel-core。

babel-runtime只允许polyfill,而不会污染全局空间,这与babel-polyfill不同。来源自http://babeljs.io/docs/plugins/transform-runtime/:

[babel-runtime]会自动为您的代码打polyfill,同时不会污染全局。 (该插件在库/工具中推荐使用)

如果使用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。


1

Babel 6的六件事已经很好地解释了,引用一下:

npm包babel不再存在。相反,Babel被分成多个包:

babel-cli,包含babel命令行界面 babel-core,包含Node API和require hook babel-polyfill,当需要时,提供完整的ES2015环境。为避免意外冲突,请确保从package.json中删除任何先前的Babel包(如babel、babel-core等),然后使用npm卸载它们。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接