前端工程化 词条目录
前端Wiki/词条/Polyfill 垫片

Polyfill 垫片

定义为旧环境补齐新 API 运行时实现的代码:让 Promise/includes 等在老浏览器可用

语法错误到不了运行时,API 缺失却能现场补:polyfill 是「补环境」的碎片——core-js 提供一份 Promise、Array.includes、Object.assign 等新 API 的实现,在全局/原型上挂上,代码就能像现代浏览器一样跑。与 Babel 转换的分工:Babel 转语法(箭头函数、可选链),polyfill 补 API(includes、assign)。

最佳实践是按需引入:useBuiltIns: 'usage' 配合 browserslist,按目标浏览器和代码实际用到的 API 自动引入最小集合,而不是全量 core-js(100KB+)。按业务确定 browserslist(比如覆盖 95% 流量),在兼容范围与产物体积间取平衡。

JavaScript
// 没有垫片的老浏览器:
[1, 2].includes(1);      // ✗ TypeError: includes is not a function
new Promise(() => {});   // ✗ Promise is not defined

// 全量引入 core-js(简单但产物大)
// import 'core-js';                     // ~100KB

// 按需引入:只在用到的地方补
import 'core-js/features/array/includes';   // 只补 includes
import 'core-js/features/promise';          // 只补 Promise

// 现代方案:preset-env usage 模式自动完成上面两行
{
  "presets": [["@babel/preset-env", {
    "useBuiltIns": "usage",    // 按代码使用情况自动按需引入
    "corejs": 3
  }]]
}

// browserslist(package.json)
// "browserslist": ["> 1%", "last 2 versions", "not dead"]
⚠ 常见误区
🔗 相关词条Babelbrowserslist 目标tsconfig.json 配置
← 返回来源章节polyfill 与 browserslist