Babel 基础

2022-04-01  本文已影响0人  _于曼丽_

Babel 是一个工具集,主要用于将 ES6(ES2015 及以后版本的统称) 版本的 JavaScript 代码转为 ES5 等向后兼容的JS代码,从而可以运行在低版本浏览器或其它环境中。

因此,你完全可以在工作中使用 ES6 编写程序,最后使用 Babel 将代码转为 ES5 的代码,这样就不用担心所在环境是否支持了。

功能

Babel 的转码工作包括三部分:

转换语法:

补齐 API:

引入 regeneratorRuntime 函数:

使用方式

  1. 通过 API 转码
require('@babel/core').transform('code', {
  presets: ['@babel/preset-env']
});
  1. 通过命令行转码
npx babel main.js -o compiled.js
  1. 通过 webpack 进行转码

组成

Babel 工具集包括核心功能包@babe/core、命令行工具包 @babel/cli、各种预设和插件包、垫片包 @babel/polyfill 等等。通过预设和插件转换语法,通过垫片补齐 API。

核心

npm i -D @babe/core @babel/cli

插件

插件用来将特定的 ES6 语法转换为 ES5 语法,例如 @babel/plugin-transform-arrow-functions 插件用来将 ES6 的箭头函数转换成 ES5 的普通函数。插件需要通过配置文件来使用。常用插件:

npm i -D @babel/plugin-transform-runtime

预设

预设是一组插件的集合,例如 babel-preset-es2015 就是所有处理 ES2015 语法的二十多个插件的集合。这样我们就不用写一大堆插件配置项了,只需要用一个预设代替就可以了。预设需要通过配置文件来使用。常用预设:

npm i -D @babel/preset-env

垫片

@babel/polyfill 用来补齐新增的 ES6 API,并且引入 regeneratorRuntime 函数。安装 @babel/polyfill 的时候,会自动安装 core-jsregenerator-runtime 这两个依赖,但是 core-js 的版本固定在 2.x.x。core-js 用来添加 API,regenerator-runtime 用来定义regeneratorRuntime 函数。

# 注意垫片安装不需要 -D,因为我们的最终代码需要引用垫片的代码
npm i @babel/polyfill
// 在入口文件的开头部分引入
import '@babel/polyfill';

官方推荐单独安装 core-jsregenerator-runtime 来代替 @babel/polyfill。安装时可以选择 core-js 的版本,默认为最新的版本(2020年4月是 core-js 3.x.x 版本),新版本的 core-js 实现了许多新的 API,例如数组的 includes 方法。

# 不需要安装 @babel/polyfill
npm i core-js regenerator-runtime
// 在入口文件的开头部分引入
import "core-js/stable";
// 以下两种方式都可以引入 regeneratorRuntime 函数,选择一种。
import "regenerator-runtime";
import "regenerator-runtime/runtime";

配置文件

无论是通过命令行工具 @babel/cli 来进行转码,还是通过 webpack 来行转码,通常情况下,都需要建立一个 Babel 配置文件来指定转码的规则。配置文件主要工作就是配置插件数组和预设数组。

格式

推荐使用 babel.config.js 格式的配置文件:

const presets = ["@babel/preset-env"]
const plugins = []

module.exports = {
  presets,
  plugins
}

.babelrc 格式的配置文件:

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

package.json 的 babel 属性

{
  "name": "demo01",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  ...
  "babel": {
    "presets": ["@babel/preset-env"],
    "plugins": []
  },
  ...
}

插件和预设的参数

const presets = [
  [
    '@babel/preset-env',
    {
      'targets': ['> 1%', 'last 2 versions', 'not ie <= 8'],
      'useBuiltIns': 'usage',
      'corejs': 2,
      'modules': false
    }
  ]
]

const plugins = [
  [
    '@babel/plugin-transform-runtime',
    {
      "helpers": true,
      "corejs": false,
      "regenerator": true,
      "useESModules": false,
      "absoluteRuntime": false,
      "version": "7.0.0-beta.0"
    }
  ]
]

module.exports = {
  presets,
  plugins
}

执行顺序

上一篇 下一篇

猜你喜欢

热点阅读