Babel 是一个工具链,主要用于将 ECMAScript 2015+ 版本的代码转换为向后兼容的 JavaScript 语法,以便能够运行在当前和旧版本的浏览器或其他环境中。下面列出的是 Babel 能为你做的事情:
Babel 的三个主要处理步骤分别是:解析(Parse)、转换(Transform)和生成(Generate)。
官方预设:
@babel/preset-env
:使用该预设能允许你使用最新版本的 JavaScript 语法而无须语法转换@babel/preset-flow
:@babel/preset-react
:@babel/preset-typescript
:实验性质的预设:stage-x preset 中任何语法转换都是对语言本身的更改,而这些更改尚未被纳入 JavaScript 标准
[TC39] 将提案分为以下几个阶段:
{"presets": [["es2015",{"modules": false}],"stage-2"]}
Babel 是一个编译器(输入源码 => 输出编译后的代码)。就像其他编译器一样,编译过程分为三个阶段:解析、转换和打印输出。
现在,Babel 虽然开箱即用,但是什么动作都不做。它基本上类似于 const babel = code => code;
,将代码解析之后再输出同样的代码。如果想要 Babel 做一些实际的工作,就需要为其添加插件。
除了一个一个的添加插件,你还可以以 preset
的形式启用一组插件。
在 Babel 转换插件 这里可以看到插件列表。
这意味着如果两个转换插件都将处理 程序(Program) 的某个代码片段,则将根据转换插件或 preset 的排列顺序依次执行。
例如:
{"plugins": ["transform-decorators-legacy", "transform-class-properties"]}
先执行 transform-decorators-legacy
,再执行 transform-class-properties
。
重要的时,preset 的顺序是 颠倒的。如下设置:
{"presets": ["es2015", "react", "stage-2"]}
babel-polyfill
在代码中的作用主要是用已经存在的语法和 API 实现一些浏览器还没有实现的 API、对浏览器的一些缺陷做一些修补。例如 Array 新增了 includes
方法,我想使用,但是低版本的浏览器没有,引入 babel-polyfill
则可以帮助我们解决这个问题。
.babelrc
参考资料: