Babel 配合 core-js 为啥没按预期 polyfill Promise?
我用 Babel + @babel/preset-env 搭配 core-js@3 做兼容处理,目标浏览器包括 IE11。明明代码里用了 Promise,但打包后没看到自动注入的 polyfill,IE11 直接报错“Promise 未定义”。我配置了 useBuiltIns: 'usage',也安装了 core-js,咋还是不行?
顺便贴一下我的 CSS,虽然应该没关系,但怕有啥隐藏影响:
.loading {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
background: #f5f5f5;
}
最简单的办法直接指定 targets: "ie 11",别用浏览器列表这种容易遗漏的方式。另外记得检查 package.json 里的 browserslist 配置,有时候这里会覆盖 Babel 的设置。
再来就是 core-js 版本问题,core-js@3 和之前的版本有点不一样。你试试在 entry 文件(比如 index.js)顶部手动加上:
这样能强制引入所有需要的 polyfill,虽然不太优雅但很管用。CSS的话,你那段样式跟这个问题没关系,纯粹是布局代码,不用操心。
最后提醒下,polyfill 体积不小,打包完记得看看 bundle 大小,别整太大了把IE11搞崩溃。折腾前端兼容真不是人干的活啊...
在入口文件(一般是 main.js 或 index.js)最前面加上:
import 'core-js/stable';
然后 babel.config.js 要这样配:
module.exports = {
presets: [
['@babel/preset-env', {
useBuiltIns: 'usage',
corejs: 3
}]
]
};
还有,确保你装的是 core-js@3,别用错了版本。