Babel 插件种类:
-
语法插件(Syntax Plugins):
-
语法插件负责扩展 Babel 的解析器,使其能够理解和解析新的或实验性的 JavaScript 语法特性。它们并不直接对代码进行转换,只是开启对应语法的解析功能。这意味着,如果没有相应的语法插件,Babel 将无法正确解析某些新的或实验性的 JavaScript 语法特性。例如,(babel 默认使用 ES5 作为目标转换语法)ECMAScript推出了一个新的语法特性,比如可选链(Optional Chaining,
?.
)或者空值合并(Nullish Coalescing,??
),在这些特性被标准化并广泛支持之前,Babel本身可能还不支持这些特性,这时,就可以编写一个语法插件来扩展Babel的解析器,让Babel正确解析这些新的语法特性(Babel官方的语法插件通常会以babel-plugin-syntax 开头)。
-
-
转换插件(Transform Plugins):
-
转换插件也叫功能插件(Feature Plugins)负责将AST 转换为另一种形式的 AST,通常用于实现语言特性的转换、代码优化等(实现将代码中的特定语法结构或特性转换为目标版本的JavaScript代码,如将ES6箭头函数转换为普通函数(
@babel/plugin-transform-arrow-functions
将箭头函数转换为普通函数)、将ES6模块转换为CommonJS模块等)。在绝大多数情况下,我们自己实现的插件更多是转换插件。
-
-
预设插件(Preset Plugins):
-
预设插件(Presets)是一种特殊的插件集合,它们包含了一组预配置的插件,用于简化 Babel 的配置过程。预设通常是根据目标环境或特定的功能需求来选择的,它们内部会包含一系列必要的转换插件,以便在编译时应用。例如,开发中常用到的预设插件以下几种:
-
@babel/preset-env
-
功能:根据目标环境自动确定所需的 Babel 插件和 polyfills。
-
它是基于你指定的目标浏览器或 Node.js 版本,来决定哪些 ECMAScript 特性需要被转换,以及哪些 polyfills 需要被包含。
-
-
@babel/preset-react
- 功能:包含转换 JSX 语法和某些 React 特定的语法特性的插件。
- 如果使用 React 开发应用,这个预设会非常有用。
-
@babel/preset-typescript
- 功能:包含转换 TypeScript 语法到纯 JavaScript 的插件。
- 如果使用 TypeScript 编写代码,并希望使用 Babel 进行构建,这个预设将帮助你完成转换。
-
@babel/preset-flow
- 功能:如果你使用 Flow 进行类型检查,这个预设将包含将 Flow 语法转换为纯 JavaScript 的插件。
-
-