我在从 Webpack 4 升级到 Webpack 5 时遇到问题,其中 Babel 似乎不再从我的依赖项之一(async-mutex)转译代码。我设法将其精简为演示问题的最小设置:
包.json
{
"scripts": {
"build": "webpack --mode=production"
},
"devDependencies": {
"@babel/core": "~7.12.0",
"@babel/preset-env": "~7.12.0",
"async-mutex": "~0.2.0",
"babel-loader": "~8.2.0",
"webpack": "~5.10.0",
"webpack-cli": "~4.2.0"
},
"babel": {
"presets": [
"@babel/preset-env"
]
},
"browserslist": [
"Explorer >= 11"
]
}
webpack.config.js
module.exports = {
entry: {
bundle: './index.js',
},
module: {
rules: [
{
test: /\.m?js$/,
use: 'babel-loader',
},
],
},
};
索引.js
import {Mutex} from 'async-mutex';
console.log(Mutex);
class MyClass {}
console.log(MyClass);
根据我的 browserslist,我需要支持 IE 11。构建并检查结果后,dist/bundle.js
我可以看到该类MyClass
已转换为函数,但该类Mutex
未转换,这显然会导致 IE 11 因语法错误而失败。就好像 Babel 使用不同的设置来处理async-mutex
包而不是处理我的index.js
.
我发现另一个问题的答案建议添加target: ['web', 'es5']
,但这没有帮助,而且似乎也没有必要,因为 Webpack 应该尊重 browserslist。
使用 Webpack 4 我没有遇到这个问题,但我不确定问题是否出在我的设置、Webpack、Babel 甚至 async-mutex 上。
注意:我知道这个最小的设置缺少 Promise polyfill,但我在这里省略它,因为它似乎与问题无关。
万千封印
神不在的星期二
相关分类