Babel的使用方法
Babel是一个广泛使用的转码器,可以将ES6代码转为ES5代码,从而在现有环境执行。
使用命令行转码
安装babel-cli:
npm install --global babel-cli
使用:
- 转码结果输出到标准输出:
babel compiled.js
- 转码结果写入一个文件:
babel source.js -o compiled.js
- 整个目录转码:
babel src -d lib
- 生成source map文件:
babel src -d lib -s
- 转码结果输出到标准输出:
在package.json中使用babel-cli
在项目中安装babel-cli:
npm install --save-dev babel-cli
在package.json中进行配置(使用npm run build就可以进行babel转码):
1
2
3
4
5
6
7
8
9{
// ...
"devDependencies": {
"babel-cli": "^6.0.0"
},
"scripts": {
"build": "babel src -d lib"
},
}
安装和注册
安装
ES2015转码规则
npm install –save-dev babel-preset-es2015react转码规则
npm install –save-dev babel-preset-reactES7不同阶段语法提案的转码规则(共有4个阶段),选装一个
npm install –save-dev babel-preset-stage-0
npm install –save-dev babel-preset-stage-1
npm install –save-dev babel-preset-stage-2
npm install –save-dev babel-preset-stage-3如果是想使用比较新的语法时,比如ES7中的async/await语法,选择安装stage-3是比较稳妥的。在安装好之后,需要在Babel的配置文件中进行注册,在项目的根目录下新建.babelrc文件并进行配置:
1
2
3
4
5
6
7
8{
"presets": [
"es2015",
"react",
"stage-2"
],
"plugins": []
}
webpack配置babel
安装:安装方式仍如上一步npm安装方式
配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24//webpack1.0
module: {
loaders: [
{
test: /\.js$/,
exclude: /(node_modules|bower_components)/,
loader: "babel",
query: {
presets: ['es2015', 'stage-3']
}
},
]
}
//webpack3.0,preset如果已经在package.json中指定(`babel:{"presets": ["lastest"]}`),这里可以不用配置
module: {
rules: {
{
test: /\.js$/,
use: 'babel-loader',
exclude: /(node_modules|bower_components)/,
}
}
}
开发环境使用babel-register
babel-register的作用是在模块使用require命令进行引入时,对该命令引入的模块进行babel的转码(只要是js/jsx/es/es6类型文件):
- 安装babel-register:
npm install --save-dev babel-register
- 加载babel-register:
require("babel-register");require("./index.js");
,即可对index.js进行转码(注意:register不会对当前js文件进行转码)
使用babel-core的API进行转码
安装:
npm install babel-core --save
使用:
1
2
3var babel = require('babel-core');
// 字符串转码
babel.transform('code();', options);
babel-polyfill
Babel默认只转换新的JavaScript句法(syntax),而不转换新的API,比如Iterator、Generator、Set、Maps、Proxy、Reflect、Symbol、Promise等全局对象,以及一些定义在全局对象上的方法(比如Object.assign)都不会转码。
举例来说,ES6在Array对象上新增了Array.from方法。Babel就不会转码这个方法。如果想让这个方法运行,必须使用babel-polyfill,为当前环境提供一个垫片。[^1]
例如之前在学习koa2的过程中,遇到了async/await的情况,就必须安装polyfill才能够正常加载。