babel是一个转译器,把同种语言的高版本规则翻译成低版本规则,允许你提前使用js语法
转译三个阶段:parsing、transforming、generating
- 解析:将代码字符串解析成抽象语法树
- 变换:将抽象语法树遍历转译
- 生成:根据变换后的抽象语法树再生成代码字符串
- 整体:ES6代码输入 ==》 babylon进行解析 ==》 得到AST ==》 plugin用babel-traverse对AST树进行遍历转译 ==》 得到新的AST树 ==》 用babel-generator通过AST树生成ES5代码
- 转换语法
npm install --save-dev babel-cli babel-preset-env
babel index.js 编译index.js文件
babel index.js --out-file compiled.js 将结果写入制定的文件
babel src --out-dir lib
{
presets:[
es2015
],
plugins:[],
env:[
development:{
plugins:[]
},
production:{
plugins:[]
}
]
}
babel只转换语法,babel-polyfill可以转换新的api
npm install --save-dev babel-polyfill
转换jsx语法
npm install --save-dev babel-preset-react
相当于 es2015 ,es2016 ,es2017 及最新版本
astexplorer.net 快速创建一个插件
generator-babel-plugin生成一个插件模板