core-js@3 完整迁移指南:告别 @babel/polyfill 的 5 步清单
2026/9/15 7:36:18 网站建设 项目流程

core-js@3 完整迁移指南:告别 @babel/polyfill 的 5 步清单

【免费下载链接】core-jsStandard Library项目地址: https://gitcode.com/GitHub_Trending/co/core-js

如果你的项目里还躺着@babel/polyfill这行 import,现在就该动手了。这个包已经弃用,而它背后那套 polyfill 方案 core-js@3 早就完成了换代:模块化标准库、更干净的 Babel 集成,都打包在这一版里。

一句话认识 core-js@3

core-js@3 是一套用 ES 语法重写的模块化 JS 标准库,负责把新标准 API 补到旧环境里。它对开发者的意义在于:只加载你需要的特性,且可以不碰全局命名空间。

哪些变化真正影响你

按影响程度分三档来看。

必须处理:直接涉及构建配置的变更。@babel/polyfill已弃用,入口写法换成了core-js/stable配 regenerator-runtime;@babel/preset-env里的corejs选项建议从 2 改成 3。这两处不改,polyfill 链路就是断的。

建议跟进:新版补齐了一批稳定 API。Array.prototype.flat/flatMapObject.fromEntriesSymbol.prototype.description,以及 ES2015 补全的@@isConcatSpreadable@@species。目标浏览器如果偏老,这些能力直接可用,不用再自己手写垫片。

了解即可:stage 提案和 Web 标准。globalThisPromise.allSettled/Promise.anyString.prototype.replaceAll、Set 新方法(union、intersection 这类)仍在提案阶段;Web 侧补了URL/URLSearchParamsqueueMicrotask和 DOM 集合的forEach。不急着接,知道它们存在即可。

一个大包拆成了三个

3.0 把代码库拆成三个子包,各司其职:

包名定位污染全局
core-js全局 polyfill,完整入口约 500KB
core-js-pure等价实现,按需 import
core-js-bundle打包后的全局版本,方便直接引用

模块命名也规范了:es.前缀是已定稿的稳定特性,esnext.前缀是仍在讨论中的提案。目录结构可以看 packages/。侵入等级还可配置,需要完整控制时可读 docs/ 中的 usage 章节。

在 Babel 里落地:只改这几处

第一处,替换旧入口,两行搞定:

import "core-js/stable"; import "regenerator-runtime/runtime";

第二处,@babel/preset-env里加corejs选项。数据源已从 compat-table 换成了core-js-compat,polyfill 注入顺序也做了优化:

{ targets: "defaults", useBuiltIns: "usage", corejs: { version: "3.40" } }

useBuiltIns: "entry"模式下,你手写的大入口(比如import "core-js/es"或某个proposals模块)会被按 targets 裁剪,只保留真正需要的模块;useBuiltIns: "usage"模式则会扫描源码,自动在用到某处语法的地方注入对应 polyfill。需要提案类 polyfill 时,加一个proposals: true就行。注意corejs建议写具体小版本号而不是裸写 3,否则小版本里新增的模块不会被注入。

第三处,@babel/runtime。它现在支持实例方法 polyfill,配corejs: 3后会把你代码里的标准库调用自动替换成 core-js-pure 的 import,即core-js-pure 不污染全局的典型用法。preset-env 和 runtime 同时用时,corejs选项只在一处配置,避免冲突。

迁移清单

  • 升级依赖到 core-js 3.x
  • 全局搜索@babel/polyfill,替换为core-js/stable加 regenerator-runtime 入口
  • preset-env 设置corejs为具体小版本号,按需选useBuiltIns: entryusage
  • 需要提案 polyfill 时开启proposals选项
  • 用 core-js-compat 核对 targets,确认没有漏网或多注入的模块

core-js@3 加上 Babel 7.4+ 的这套组合,把 polyfill 从「手动搬运」变成了「按目标环境自动裁剪」。今天就可以把上面五步过一遍,构建产物多半会瘦一圈。

【免费下载链接】core-jsStandard Library项目地址: https://gitcode.com/GitHub_Trending/co/core-js

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询