Babel

Babel是一个语法转码器,意在将ES6代码转为浏览器广泛支持的ES5代码。

\注意,Babel只做语法的转化,比如箭头函数的转换,并不提供*API的支持,如果需要提高兼容性,还需要其他模块插件支持。

配置文件.babelrc

存放在项目根目录

1
2
3
4
{
"presets": [],
"plugins": []
}

presets设置转码规则,每个规则对语法的支持度不同,常用preset-2015,具体选择哪些规则按自己的需求而定。

Babel-core

通过Babel的API进行转码

1
require('babel-core').transform('code', options)

Babel-register

该模块是用来改造nodejs中的require方法,为其添加一个钩子,使require在之后加载模块的时候直接使用Babel实时转码,也可以对其配置

1
2
3
4
5
require('babel-register')({
ignore: /regexp/ | fn,
only: '',
extensions: ['.es6', '.es', '.jsx', 'js']
})

Babel-polyfill

提高代码的兼容性,必须使用babel-polyfill模拟一个ES2015的环境,babel-polyfill是对全局环境的修改。

为了引入Babel-polyfill只需要在入口文件引入文件即可

1
2
3
require('babel-polyfill')
import('babel-polyfill')

Babel-runtime

与Babel-polyfill一样,Babel-runtime也是模拟ES2015的环境,不同的是Babel-runtime不会污染全局变量。Babel-runtime可以将一些babel内置的助手函数单独抽取出来,减少代码冗余。另外一点Babel-runtime将见一些内置的API放置在core-js中,需要的时候只需要require('babel-runtime/core-js/promise')加载进来,避免了通过polyfill扩展全局变量的尴尬。如果是要发布一个库,做好的方式还是采用Babel-runtime这种方式,它让你完全控制代码的运行环境,不受浏览器的影响。

Babel-runtime的使用多和babel-plugin-transform-runtime配合使用,提高开发效率

1
2
3
4
5
6
7
8
9
10
{
"plugins": [
["transform-runtime", {
"helpers": false, //是否开启帮助函数提取功能
"polyfill": false, //是否开启polyfill功能
"regenerator": true, //是否引入regenerator,Babel会对Generator函数进行重写,如果不开启这项文件执行会报错
"moduleName": "babel-runtime"
}]
]
}

以上的配置都需要根据自己的实际运行环境来选择。