使用Webpack+Babel开发项目时无法解析@babel/polyfill求助
问题还原
用Webpack搭配Babel、原生JS开发网页克隆项目,执行npm脚本dev:assets(对应命令:cross-env WEBPACK_ENV=development webpack -w)时,报错:
ERROR in multi @babel/polyfill ./assets/js/main.js Module not found: Error: Can't resolve '@babel/polyfill' in 'C:\Users\82106\wetube' @ multi @babel/polyfill ./assets/js/main.js main[0]
已安装core-js,但问题未解决。
核心原因
@babel/polyfill在Babel 7.4.0版本后已被废弃,官方改用core-js(负责ES新API的polyfill)和regenerator-runtime(负责Generator/async函数的polyfill)替代。当前Webpack入口仍在引用已废弃的@babel/polyfill,且未正确配置core-js的使用方式,导致报错。
具体解决步骤
清理废弃依赖,安装正确包
先卸载可能存在的@babel/polyfill,再安装指定版本的替代依赖:npm uninstall @babel/polyfill npm install core-js@3 regenerator-runtime --save修改Webpack入口配置
打开webpack.config.js,移除入口数组中的@babel/polyfill,改为:entry: ['./assets/js/main.js']配置Babel自动按需导入polyfill
在Babel配置文件(babel.config.js或.babelrc)中,修改@babel/preset-env的配置,指定core-js版本和自动按需导入规则:module.exports = { presets: [ ['@babel/preset-env', { targets: { // 根据项目需求调整目标浏览器,示例为兼容主流浏览器最近2个版本 browsers: ['> 1%', 'last 2 versions', 'not dead'] }, useBuiltIns: 'usage', // 自动按需导入所需的polyfill corejs: 3 // 指定使用core-js@3版本 }] ] };(如果不想自动按需导入,也可以在main.js开头手动导入:
import 'core-js/stable'; import 'regenerator-runtime/runtime';)验证依赖版本匹配
检查package.json中@babel/preset-env的版本,确保它支持core-js@3(@babel/preset-env 7.4.0及以上版本支持),如果版本过低,执行:npm update @babel/preset-env --save-dev
完成以上步骤后,重新执行npm run dev:assets即可解决报错。
内容的提问来源于stack exchange,提问作者MRM

