Babel 编译工具
Babel是前端开发中最常见的第三方工具。许多知名的开源库都依赖于Babel,包括React和vue等。
注意
这个 Babel 并非 the Bible
Babel 的用途
Babel 主要用于三个方面:
- 转译比较新的语法,将代码转为兼容性比较高的写法,保证代码可以在旧版本的浏览器中运行;
- 通过 polyfill方式在目标环境中添加缺失的特性;
- 源码转换,比如将 JSX语法转为React.createElement函数;
Babel 常用包介绍
Babel 将不同的工作分 置到几个不同的包中,其中:
- @babel/coreBabel 的核心包,其它的包都依赖于它。
- @babel/cli包是 Babel 提供的命令行工具,主要提供 Babel 命令。
- @babel/preset-env会根据配置的目标环境生成控件列表并进行编译。以在- package.json文件的- browserslist中进行配置。
- @babel/polyfill为代码添加低版本浏览器缺失的特性;
Babel默认只转换新的JavaScript语法,但是不转换新的API,
比如Iterator、Generator、Set、Maps、Proxy、Reflect、Symbol和Promise等全局对象,
以及一些定义在Object对象上的方法等(比如Object.assign)都不会被转换。
如果还想正常执行,就需要使用@babel/polyfill了。
但是,Babel 7.4 之后不再推荐使用
@babel/polyfill, 而@babel/preset-env和plugin-transform-runtime二者都可以设置corejs来处理polyfill。
Babel 只在编译时使用,不需要打包进正式环境,可以用以下命令安装:
yarn add --dev @babel/core @babel/cli @babel/preset-env
Babel 的配置文件
安装后需要在项目根目录下新建配置文件,并编写自己的配置代码。
Babel 一般有四种配置方式:
- babel.config.js文件,需要导出一个函数,函数里返回插件数据。推荐。(该配置是项目级别的配置,会影响整个项目中的代码,包括node_modules)
- .babelrc配置文件内容为JSON数据结构。(只影响本项目中的代码)
- 在 package.json文件中配置babel字段
- .babelrc.js该配置与- .babelrc相同, 但是需要使用- JavaScript实现,返回的是一个json。
示例

配置好之后,可以在 package.json 文件中添加一行 scripts,用来运行 babel:
{
    "scripts": {
        "babel": "babel src --out-dir lib"
    }
}
其中, src 指定的是需要编译的代码,--out-dir 用于表明指定的输出地址为 lib 。
src/index.js 中写入以下代码:
let add = a => b => a + b;
运行 yarn babel,得到:
"use strict";
var add = function add(a) {
  return function (b) {
    return a + b;
  };
};

Babel 工作过程
Babel与大多数编译器一样,它的工作过程可分成三部分:解析、转换和代码生成。
参考资料
- 《前端开发必知必会:从工程核心到前沿实战 》
- babeljs.io