Babel 是一个广泛使用的 JavaScript 编译器,主要用于将采用最新标准(ES6+)编写的 JavaScript 代码,转换成当前或老旧浏览器、Node.js 环境能够理解和执行的向后兼容版本。

你可以把它理解为一种“语法翻译工具”。它的核心工作流程是:解析(Parse)→ 转换(Transform)→ 生成(Generate)

Babel 的主要功能

  1. 语法转换
    这是最核心的功能。例如,将你写的箭头函数、const/let、模板字符串、类(Class)、Async/Await 等 ES6+ 语法,转译为 ES5 风格的 functionvar 等语法。

    输入(ES6):

    const greet = (name) => `Hello, ${name}!`;

    输出(ES5):

    var greet = function greet(name) {
      return "Hello, " + name + "!";
    };
  2. Polyfill(垫片)补全
    Babel 只负责转换语法,对于新的全局 API(如 PromiseMapSetArray.from)或实例方法(如 [].includes),则需要通过 Polyfill(如 core-js)来模拟实现,确保这些 API 在不支持的旧环境中也能工作。

  3. 源码转换(扩展支持)
    除了标准 JavaScript,Babel 还能通过预设(Preset)和插件(Plugin)转换其他语言的变体或扩展,例如:

    • React JSX:将 <div>Hello</div> 转换为 React.createElement('div', null, 'Hello')
    • TypeScript:去除类型注解,将其转为普通 JavaScript(注意:Babel 不做类型检查)。
    • Flow:去除 Flow 类型标记。

Babel 的工作原理简图

源代码 (ES6+/JSX/TS)
        ↓
    [解析] → 抽象语法树 (AST)
        ↓
    [转换] → 应用插件/预设修改 AST
        ↓
    [生成] → 目标代码 (ES5/兼容代码)

常见使用场景

  • 前端工程化:几乎所有的现代前端项目(如 Vue、React、Angular 项目)都依赖 Babel 来处理 .js.jsx 文件。
  • Node.js 服务端:在使用较新语法编写 Node.js 应用时,可以通过 Babel 确保在目标 Node 版本上稳定运行。
  • 库/工具开发:发布到 npm 的包通常会先用 Babel 编译一遍,这样使用者无论用不用 Babel,都能直接引用。

一句话总结

Babel 让你可以毫无顾虑地使用最新的 JavaScript 语法和特性来写代码,而不用担心用户的浏览器是否支持。