BabelJS - 概述

BabelJS 是一个 JavaScript 转译器,可将新功能转译为旧标准。借助它,这些功能可以在新旧浏览器上轻松运行。澳大利亚开发人员 Sebastian McKenzie 创立了 BabelJS。

为什么要使用 BabelJS?

JavaScript 是浏览器可以理解的语言。我们使用不同的浏览器来运行我们的应用程序,包括 Chrome、Firefox、Internet Explorer、Microsoft Edge、Opera、UC 浏览器等。ECMA Script 是 JavaScript 语言规范;ECMA Script 2015 ES6 是稳定版本,可在所有新旧浏览器中正常运行。

在 ES5 之后,我们又有了 ES6、ES7 和 ES8。ES6 发布时包含许多新功能,但并非所有浏览器都完全支持这些功能。ES7、ES8 和 ESNext(ECMA Script 的下一个版本)也是如此。现在还不确定什么时候所有浏览器都可以兼容所有发布的 ES 版本。

如果我们计划使用 ES6 或 ES7 或 ES8 功能来编写代码,由于缺乏对新更改的支持,它往往会在某些旧浏览器中崩溃。因此,如果我们想在代码中使用 ECMA Script 的新功能,并希望在所有可能的浏览器上运行它,我们需要一个可以在 ES5 中编译最终代码的工具。

Babel 的作用相同,它被称为转译器,可以转译我们想要的 ECMA Script 版本的代码。它具有预设和插件等功能,可以配置我们转译代码所需的 ECMA 版本。使用 Babel,开发人员可以使用 JavaScript 中的新功能编写代码。用户可以使用 Babel 转译代码;代码稍后可以在任何浏览器中使用,不会出现任何问题。

下表列出了 ES6、ES7 和 ES8 中可用的功能 −

功能 ECMA 脚本版本
Let + Const ES6
Arrow Functions ES6
Classes ES6
Promises ES6
Generators ES6
Iterators ES6
Modules ES6
Destructuring ES6
Template Literals ES6
Enhanced Object ES6
Default, Rest & Spread Properties ES6
Async - Await ES7
Exponentiation Operator ES7
Array.prototype.includes() ES7
String Padding ES8

BabelJS 管理以下两个部分 −

  • transpiling
  • polyfilling

什么是 Babel-Transpiler?

Babel-transpiler 将现代 JavaScript 的语法转换为旧版浏览器可以轻松理解的形式。例如,箭头函数、const、let 类将转换为函数、var 等。在这里,语法(即箭头函数)转换为普通函数,在两种情况下保持功能相同。

什么是 Babel-polyfill?

JavaScript 中添加了新功能,如承诺、映射和包含。这些功能可用于数组;同样,当使用 babel 进行转译时,不会被转换。如果新功能是方法或对象,我们需要使用 Babel-polyfill 和转译功能使其在旧版浏览器上运行。

以下是 JavaScript 中可用的 ECMA Script 功能列表,可以进行转译和 polyfill −

  • Classes
  • Decorators
  • Const
  • Modules
  • Destructing
  • Default parameters
  • Computed property names
  • Object rest/spread
  • Async functions
  • Arrow functions
  • Rest parameters
  • Spread
  • Template Literals

可以实现 polyfill 的 ECMA Script 功能−

  • Promises
  • Map
  • Set
  • Symbol
  • Weakmap
  • Weakset
  • includess
  • Array.from、Array.of、Array#find、Array.buffer、Array#findIndex
  • Object.assign、Object.entries、Object.values

BabelJS 的功能

在本节中,我们将了解 BabelJS 的不同功能。以下是 BabelJS 最重要的核心功能 −

Babel-Plugins

插件和预设是 Babel 转译代码的配置详细信息。Babel 支持许多插件,如果我们知道代码将在哪个环境中执行,则可以单独使用它们。

Babel-Presets

Babel 预设是一组插件,即 babel-transpiler 的配置详细信息,用于指示 Babel 以特定模式进行转译。我们需要使用预设,它具有我们希望代码转换的环境。例如,es2015 预设将代码转换为 es5

Babel-Polyfills

有些功能(如方法和对象)无法转译。在这种情况下,我们可以利用 babel-polyfill 来方便在任何浏览器中使用这些功能。让我们考虑一下承诺的例子;为了让该功能在旧浏览器中工作,我们需要使用 polyfills。

Babel-Polyfills

Babel-cli 附带了一堆命令,可以在命令行上轻松编译代码。它还具有插件和预设等功能,可与命令一起使用,从而可以轻松地一次性转译代码。

使用 BabelJS 的优势

在本节中,我们将了解使用 BabelJS 的不同优势 −

  • BabelJS 为 JavaScript 的所有新添加功能提供向后兼容性,并且可以在任何浏览器中使用。

  • BabelJS 能够转译以采用下一个即将推出的 JavaScript 版本 - ES6、ES7、ESNext 等。

  • BabelJS 可以与 gulp、webpack、flow、react、typescript 等一起使用,功能非常强大,可以用于大型项目,让开发人员的工作变得轻松。

  • BabelJS 还可以与 react JSX 语法一起使用,并且可以在 JSX 中编译形式。

  • BabelJS 支持插件、polyfill、babel-cli,可轻松处理大型项目。

使用 BabelJS 的缺点

在本节中,我们将了解使用 BabelJS 的不同缺点 −

  • BabelJS 代码在转译时会更改语法,这使得代码在发布到生产环境时难以理解。

  • 与原始代码相比,转译后的代码更大。

  • 并非所有 ES6/7/8 或即将推出的新功能都可以转译,我们必须使用 polyfill 才能使其在旧版浏览器上运行。

这是 babeljs 的官方网站 https://babeljs.io/

编译器