Babel 及其插件的最佳实践

阅读时长 5 分钟读完

什么是 Babel?

Babel 是一个 JavaScript 编译器,可以将最新版本的 JavaScript(ES6、ES7、ES8 等)代码转换成可以在当前浏览器环境下运行的代码,也就是转换成 ES5 版本的 JavaScript 代码。Babel 的主要功能是语法转换,例如将箭头函数转换成普通函数,将 const 和 let 转换成 var,还有一些其他的语法转换。

Babel 插件

Babel 的主要功能是语法转换,但有些特性(例如 Promise 和 Map)需要额外的处理才能转换,这就需要借助 Babel 插件了。Babel 插件可以扩展 Babel 的功能。Babel 插件可以分为两类:

  • 语法插件(syntax plugins):用于解析新的 JavaScript 语法;
  • 转换插件(transform plugins):用于将新的 JavaScript 特性转换成 ES5 特性。

Babel 的最佳实践

配置 Babel 的 .babelrc 文件

Babel 的配置文件为 .babelrc,这个文件使用 JSON 格式来描述 Babel 的配置。

示例代码:

-- -------------------- ---- -------
-
  ---------- -
    -------------------
  --
  ---------- -
    ----------------------------------
    -----------------------------------------
  -
-

上面的配置文件中:

  • presets 字段用来配置 Babel 的预设(preset)。Babel 的预设是一组插件的集合,用来转换某个特定的 JavaScript 特性。@babel/preset-env 是一个预设,它可以根据当前环境的配置来自动地转换新的 JavaScript 特性。
  • plugins 字段用来配置 Babel 的插件。@babel/plugin-transform-runtime 可以解决转换特定语法所需要的 runtime helpers 产生的代码冗杂问题,如不支持 Promise 的浏览器的代码转换问题。@babel/plugin-proposal-class-properties 用来支持 JavaScript 的类属性特性,该特性是 ES7 的语法。

使用 Babel 转换 JavaScript

Babel 可以转换 JavaScript 源代码,我们可以使用 Babel 命令行工具或 Webpack 插件来实现。

在命令行下使用 Babel 转换 JavaScript:

在 Webpack 中使用 Babel:

-- -------------------- ---- -------
------- -
  ------ -
    -
      ----- --------------
      -------- ---------------
      ---- -
        ------- ---------------
        -------- -
          -------- ----------------------
          -------- -----------------------------------
        -
      -
    -
  -
-

使用 Polyfill

Babel 转换 ES6 及以上版本的代码时,会使用 ES5 的语法特性来代替新的特性。但是有些 ES5 版本的浏览器还是不支持某些新的特性,这时就需要使用 Polyfill。Polyfill 是一种 JavaScript 代码,可以在运行时(runtime)为不支持某些语法特性的浏览器提供必要的代码实现。其中,@babel/polyfill 是 Babel 提供的一个非常优秀的 Polyfill。

在 Babel 的配置文件中使用 Polyfill:

-- -------------------- ---- -------
-
  ---------- -
    -
      --------------------
      -
        -------------- --------
        --------- -------
      -
    -
  -
-

上面的配置文件中,我们使用了 @babel/preset-envuseBuiltIns 这个参数,用来确定如何引入 polyfill。这个参数有如下几个值:

  • false:默认值,仅会对代码进行语法转换,不会引入 polyfill;
  • entry:会根据 browserslist 中配置的浏览器环境,自动导入相应的 polyfill;
  • usage:仅会导入使用到的 polyfill,这需要根据具体的代码情况进行自动选择;

corejs 是一个必选参数,用来指定 polyfill 所使用的 CoreJS 的版本号。

Tips

在日常的开发中,我们经常会使用 TypeScript 来编写代码,Babel 也提供了一个称为 @babel/preset-typescript 的预设,用来将 TypeScript 编译成 JavaScript。这个预设与 @babel/preset-env 预设一样,所以可以在 .babelrc 配置文件中轻松将 TypeScript 代码编译成 JavaScript 代码。

总结

Babel 是一个非常优秀的 JavaScript 编译器,可以将最新版本的 JavaScript 代码转换成可以在当前浏览器环境下运行的代码,也就是转换成 ES5 版本的 JavaScript 代码。通过本文,你应该掌握了 Babel 插件及其配置的最佳实践,并且能够编写可靠的 Babel 配置文件,以实现 JavaScript 代码的转换,同时使用 Polyfill 为旧版本浏览器提供相应的代码实现,减少兼容性问题的出现。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64507a31980a9b385b9815cf

纠错
反馈