前端工程化 词条目录
前端Wiki/前端工程化/进阶/Babel 与编译目标

Babel 做了什么

Babel 是 JavaScript 编译器:把新语法(箭头函数、可选链、空值合并等)翻译成旧浏览器能运行的等价代码。它的输入是新版 JS,输出是“目标浏览器普遍支持”的旧版 JS。

原理分三步:把源码解析成 AST(抽象语法树)→ 遍历树做节点替换 → 重新生成代码。插件(plugin)定义“遇到什么节点怎么改”,预设(preset)是插件集合——@babel/preset-env 按目标浏览器自动挑选需要的插件。

  • Babel 只转语法(箭头函数 → function),不补 API(Promise.includes 等要 polyfill)
  • preset-env + targets:告诉它“要兼容哪些浏览器”,它自动选插件
  • 现代框架的底层都是 AST:Babel、ESLint、Prettier、TypeScript 同源
编译
// 源码(现代语法)
const name = obj?.name ?? '匿名';
const sum = (a, b) => a + b;

// Babel 编译后(ES5 等价代码)
var name = obj === null || obj === void 0 ? void 0 : obj.name;
if (name === null || name === void 0) name = '匿名';
var sum = function (a, b) { return a + b; };

// babel.config.js —— 最常见配置(JS 文件可写注释)
module.exports = {
  presets: [
    ['@babel/preset-env', {
      targets: { chrome: '60', safari: '12' },   // 目标浏览器
      useBuiltIns: 'usage',                      // 按需注入 polyfill
      corejs: 3,
    }],
  ],
};
本节要点Babel 把新语法编译成旧语法;语法转换靠插件,目标兼容靠 targets 驱动 preset-env。