Babel 的 runtime 和 polyfill 到底有什么区别?
我最近在项目里用 Babel 转译代码,看到有 @babel/runtime 和 @babel/polyfill 两个东西,但搞不太清楚它们到底啥区别。
听说现在不推荐用 polyfill 了,改用 runtime,但我加了 @babel/plugin-transform-runtime 插件后,发现像 Promise、Array.from 这些还是报错,是不是还得手动引入 core-js?
我的 .babelrc 配置是这样的:
{
"plugins": [
["@babel/plugin-transform-runtime", {
"corejs": false,
"helpers": true,
"regenerator": true
}]
]
}
这样配的话,runtime 到底能处理哪些东西?是不是还得额外装别的包?有点懵……
现在官方文档里确实建议用 core-js 来代替 @babel/polyfill。你的配置中
corejs: false意味着你没启用核心库功能,所以像 Promise 这种需要手动引入。把配置改成这样:
然后安装
core-js@3和@babel/runtime。记得在入口文件加上import 'core-js/stable'; import 'regenerator-runtime/runtime';。这样做基本能解决现代浏览器的兼容问题。别忘了根据实际需求调整 polyfill 范围,不然体积可能有点大。说实话这配置折腾起来挺费劲,不过按文档来准没错。
这样就不用纠结 runtime 和 polyfill 的区别了,反正你都需要 core-js 来填坑。别忘了 npm install @babel/preset-env core-js --save-dev 啊,不然还是报错。