Q: @babel/polyfill 为什么被弃用了?如何配置才是现代的最佳实践 (useBuiltIns 与 runtime-corejs3)?
Babel 可以转换新 语法 (Syntax) (如 let, =>),但不能转换新 API (Built-in) (如 Promise, Set, Array.from)。这就需要 Polyfill (垫片)。
window.Promise, Array.prototype.includes)。core-js 全量引入,导致包体积暴增。这是目前应用开发 (Application Development) 的主流方案。
Promise,就自动插入 import "core-js/modules/es.promise"。这是开发 工具库 (Library/SDK) 的最佳实践。
core-js-pure 中函数的调用,不污染全局对象。
Promise.resolve()import _Promise from "@babel/runtime-corejs3/core-js-stable/promise"; _Promise.resolve()[].includes('a') ),因为这需要修改 Array.prototype。但在 core-js@3 中已经支持了实例方法的 polyfill (通过 call 指向新的函数)。如果你的目标浏览器 (Target) 不支持某些 ES6+ 特性 (如 IE11 不支持 Promise)。现代浏览器大多原生支持,这时候 Polyfill 代码就是累赘。Babel 的 preset-env 会根据 browserslist 智能判断是否需要 Polyfill,这是目前最完美的平衡方案。