- BabelJs 教程
- BabelJs - 首页
- BabelJS - 概述
- BabelJS - 环境搭建
- BabelJS - 命令行界面 (CLI)
- BabelJS - ES6 代码执行
- BabelJS - 使用 Babel 6 进行项目搭建
- BabelJS - 使用 Babel 7 进行项目搭建
- 将 ES6 特性转换为 ES5
- 将 ES6 模块转换为 ES5
- 将 ES7 特性转换为 ES5
- 将 ES8 特性转换为 ES5
- BabelJS - Babel 插件
- BabelJS - Babel Polyfill
- BabelJS - Babel 命令行界面 (CLI)
- BabelJS - Babel 预设
- Babel 与 Webpack 的结合使用
- Babel 与 JSX 的结合使用
- Babel 与 Flow 的结合使用
- BabelJS 与 Gulp 的结合使用
- BabelJS - 示例
- BabelJS 有用资源
- BabelJS - 快速指南
- BabelJS - 有用资源
- BabelJS - 讨论
BabelJS - 概述
BabelJS 是一个 JavaScript 转译器,它将新特性转译成旧标准。这样,这些特性就可以在旧版和新版浏览器上无障碍运行。澳大利亚开发者 Sebastian McKenzie 创建了 BabelJS。
为什么选择 BabelJS?
JavaScript 是浏览器理解的语言。我们使用不同的浏览器来运行我们的应用程序——Chrome、Firefox、Internet Explorer、Microsoft Edge、Opera、UC 浏览器等等。ECMAScript 是 JavaScript 语言规范;ECMAScript 2015 (ES6) 是一个稳定的版本,在新旧浏览器中都能很好地工作。
在 ES5 之后,我们有了 ES6、ES7 和 ES8。ES6 发布了许多新特性,并非所有浏览器都完全支持。ES7、ES8 和 ESNext(ECMAScript 的下一个版本)也是如此。目前尚不清楚所有浏览器何时才能兼容所有已发布的 ES 版本。
如果我们计划使用 ES6 或 ES7 或 ES8 特性来编写代码,由于缺乏对新更改的支持,它可能会在某些旧版浏览器中出现故障。因此,如果我们想在代码中使用 ECMAScript 的新特性,并希望它能够在所有可能的浏览器上运行,我们需要一个工具将我们的最终代码编译成 ES5。
Babel 就能做到这一点,它被称为转译器,可以将代码转译成我们想要的 ECMAScript 版本。它具有预设和插件等特性,可以配置我们需要转译代码的 ECMAScript 版本。使用 Babel,开发者可以使用 JavaScript 中的新特性编写代码。用户可以使用 Babel 转译代码;之后,这些代码可以在任何浏览器中无任何问题地使用。
下表列出了 ES6、ES7 和 ES8 中可用的特性:
特性 | ECMAScript 版本 |
---|---|
Let + Const | ES6 |
箭头函数 | ES6 |
类 | ES6 |
Promise | ES6 |
生成器 | ES6 |
迭代器 | ES6 |
模块 | ES6 |
解构 | ES6 |
模板字面量 | ES6 |
增强的对象 | ES6 |
默认参数、剩余参数和扩展运算符 | ES6 |
Async/Await | ES7 |
指数运算符 | ES7 |
Array.prototype.includes() | ES7 |
字符串填充 | ES8 |
BabelJS 管理以下两部分:
- 转译
- polyfill
什么是 Babel 转译器?
Babel 转译器将现代 JavaScript 的语法转换为旧版浏览器可以轻松理解的形式。例如,箭头函数、const、let 类将被转换为函数、var 等。这里语法,即箭头函数,被转换为普通函数,同时保持两种情况下的功能相同。
什么是 Babel polyfill?
JavaScript 中添加了一些新特性,例如 Promise、Map 和 includes。这些特性可以用于数组;但是,当使用 babel 进行转译时,它们不会被转换。如果新特性是方法或对象,我们需要结合使用 Babel polyfill 和转译才能使其在旧版浏览器中工作。
以下是 JavaScript 中可用的 ECMAScript 特性列表,这些特性可以进行转译和 polyfill:
- 类
- 装饰器
- Const
- 模块
- 解构
- 默认参数
- 计算属性名
- 对象 rest/spread
- 异步函数
- 箭头函数
- 剩余参数
- 扩展运算符
- 模板字面量
可以进行 polyfill 的 ECMAScript 特性:
- Promise
- Map
- Set
- Symbol
- WeakMap
- WeakSet
- includes
- Array.from, Array.of, Array#find, Array.buffer, Array#findIndex
- Object.assign, Object.entries, Object.values
BabelJS 的特性
在本节中,我们将了解 BabelJS 的不同特性。以下是 BabelJS 最重要的核心特性:
Babel 插件
插件和预设是 Babel 转译代码的配置细节。如果我们知道代码将运行的环境,Babel 支持许多可以单独使用的插件。
Babel 预设
Babel 预设是一组插件,即向 babel 转译器提供的配置细节,指示 Babel 以特定模式进行转译。我们需要使用预设,其中包含我们希望代码被转换到的环境。例如,`es2015` 预设将代码转换为 `es5`。
Babel Polyfill
有些特性(例如方法和对象)无法进行转译。在这种情况下,我们可以使用 babel-polyfill 来方便在任何浏览器中使用这些特性。让我们考虑 Promise 的示例;为了使该特性在旧版浏览器中工作,我们需要使用 polyfill。
Babel Polyfill
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://babel.node.org.cn/。