Array.prototype.includes、 Array.prototype.includes、 Array.prototype.includes、
前端工程化 词条目录
前端Wiki/前端工程化/进阶/Babel 与编译目标

polyfill 与 browserslist

Babel 只转“语法”,不转“API”:旧浏览器没有 Array.prototype.includes、Promise 这些运行时方法,需要 polyfill(补丁库,如 core-js)先定义它们,代码才能跑。

“兼容到什么浏览器”由 browserslist 配置统一驱动:Babel、Autoprefixer、ESLint 兼容规则都读同一份配置,通常写在 .browserslistrc 或 package.json 的 browserslist 字段里。

  • 语法转换(Babel)与 API 补丁(core-js polyfill)是两件事,缺一不可
  • useBuiltIns: usage 按代码实际用到的方法注入 polyfill,体积最小
  • browserslist 是全工具的兼容目标:> 1%、last 2 versions、not dead 等查询语法
配置
// .browserslistrc —— 一份配置,全家共享(用 # 注释)
# 全球占有率超 0.5% 的浏览器
> 0.5%
# 每个浏览器的最新 2 个版本
last 2 versions
# 仍在维护(有官方更新)的浏览器
not dead
# 兼容到 iPhone 12 的 Safari
iPhone >= 12

// 源码用到了新 API
arr.includes(42);            // 需要 Array.prototype.includes
Promise.allSettled(ps);      // 需要 Promise.allSettled

// 配合 useBuiltIns: usage,打包后自动在最前面注入:
// import 'core-js/modules/es.array.includes.js';
// import 'core-js/modules/es.promise.all-settled.js';
// (只补你用到的,不多不少)
本节要点browserslist 定义兼容目标;Babel 转语法 + core-js 补 API,usage 模式按需注入体积最小。