Skip to content

Babel

Babel 是一个 JavaScript 编译器,主要用于将 ES6+ 代码转换成当前和旧版浏览器能够运行的 JavaScript 代码。

Babel 的主要功能:

  • 转换语法:将 ES6+ 新语法转换为 ES5
  • Polyfil:添加缺失的特性,如 Promise,Symbol 等,这就是 Polyfil。Babel 提供了一个 Polyfill 功能,能自动引入所需的 Polyfill。这个功能通过 core-js 模块实现(Babel v7.4.0 之前使用的是 @babel/polyfill),可以模拟整个 ES6 环境。
  • 源代码转换 (codemods)
  • 插件和预设:插件是小型 JavaScript 程序,指导 Babel 如何对代码进行转换。预设是一组预先确定的插件。

快速上手

在项目中安装 Babel:

shell
npm install --save-dev @babel/core @babel/cli @babel/preset-env
  • @babel/core:这个是 Babel 的核心包,提供了核心 API
  • @babel/cli:该依赖提供 CLI 命令行工具
  • @babel/preset-env:预设环境,即一组预先确定的插件

规则配置

在项目根目录下创建 babel.config.json文件(需要 v7.8.0 及更高版本),编写 json 格式配置。

plugins

插件。

属性值为一个数组,注意使用到的插件需要提前进行安装。

json
{
  "plugins": [["@babel/plugin-transform-arrow-functions", {}]]
}

presets

预设。

属性值为一个数组,注意使用到的预设需要提前进行安装。

json
{
  "presets": ["@babel/preset-env"]
}

官方提供了 4 套预设:

  • @babel/preset-env 用于编译 ES6 及以上版本的语法
  • @babel/preset-typescript 用于 TypeScript
  • @babel/preset-react 用于 React
  • @babel/preset-flow 用于 Flow

tagets

指定要兼容的浏览器版本范围。

json
{
  "targets": "> 0.25%, not dead"
}

env

根据不同的环境提供不同配置。

json
{
  "env": {
    "development": {
      "plugins": ["pluginA"]
    },
    "production": {
      "plugins": ["pluginB"]
    }
  }
}

sourceMaps

是否生成 sourceMaps。

json
{
 "sourceMaps": true
}

sourceFileName

指定 sourceMaps 生成的文件名。

json
{
 "sourceFileName": "mySourceMap.js"
}

sourceRoot

指定 sourceMaps 生成的文件路径。

json
{
  "sourceMaps": true,
  "sourceFileName": "mySourceMap.js",
  "sourceRoot": "/souceMapDir/" // 前缀
}

CLI

--out-file(or -o)

输出文件。

shell
# 编译script.js输出到script-compiled.js 
babel script.js --out-file script-compiled.js

--out-dir(or -d)

输出目录。

shell
# 编译src目录输出到lib目录
babel src --out-dir lib

--watch(or -w)

监听变化。

shell
# 每当script.js发生变化时重新编译
babel script.js --watch --out-file script-compiled.js

--ignore

忽略文件。

shell
# 忽略src目录下面的所有规范和测试文件
babel src --out-dir lib --ignore "src/**/*.spec.js","src/**/*.test.js"

--copy-files

复制文件。

shell
# 将 src 目录下的文件原封不动的复制到 lib 目录下
babel src --out-dir lib --copy-files