本文翻译自The Six Things You Need To Know About Babel 6。
从去年开始,Babel成为了一个将ES2015和JSX转换为无趣古老的javascript语言的标配转换工具。但是一夜之间,Babel 6 改变了这一切。原先的Babel组件已经被取缔了,执行babel
不再起作用。同时,原先版本的说明文档也已经消失不见了。
别担心!为了让你快速上手,我将列出新版本中的6
个最重要的变化。如果需要更多的帮助,可以查看The Complete Guide to ES6 with Babel 6。在这篇文章中将详细介绍Babel 6的细节,包括CLI
、Webpack
、Mocha
和Gulp
。
1. 原先的Babel
包将不再可用,取而代之的是诸多的包
babel-cli
,包含了Babel
的相关命令行界面;babel-core
,包含了Node API
和require
钩子;babel-pollfill
,俗称垫片
,可以创在一个完全适合ES2015运行的环境。
为了避免出现冲突,需要确保从package.json
中移除所有原始版本的Babel包,包括babel
、babel-core
等,然后使用npm uninstall
卸载。
2. 任何一个简单的转换都是一个插件,包括ES2015和JSX
所以,原先的命令将不在起任何作用,需要安装相应的功能插件后才能生效。实际上,ES2015
包括大概20个插件,你并不需要一个一个的去安装。
3. Babel 6增加了预处理或者插件集
在Babel 5
中,预先增加了babel-preset-es2015
和 babel-preset-react
两个插件。而在Babel 6
中,我们需要自行安装。
npm install babel-preset-es2015 babel-preset-react --save-dev
即使安装了预处理插件,你仍然需要告诉Babel
去使用此插件。
4. .babelrc
是必须的
由于Babel
默认不再使用ES2015和React转换,那么使用require
钩子的gulpfile.babel.js
和Mocha
将无法使用。你需要在项目目录增加.babelrc
文件来解决此问题。
{
"presets": ["es2015", "react"]
}
5. Stage 0 是一个单独的预处理,而不是一个选项
以前,你可以通过传递参数--stage 0
给Babel来使得ES7的相关特性能够使用,比如async
/ await
。但是现在,你需要安装babel-preset-stage-0
才能使用了。
6. --external-helpers
参数的相关功能也变成了一个插件。
为了避免重复引入Babel的helper函数,我们需要单独安装和使用babel-plugin-transform-runtime
插件,然后将babel-runtime
包加入到你的代码中(即使你已经使用了垫片代码)。