我使用webpack为我的客户打包代码。根据我的问题(Chrome 80)是否有可能在任何承诺得到满足时摆脱等待Promise.all,我想使用
我错在哪里了?
Promise.any()
,但是Promise.any
仅适用于Chrome 85+,我的客户需要我支持Chrome 80+。自然地,我认为通过babel我可以polyfill Promise.any()
,例如corejs提供了Promise.any。但是我不知道哪里做错了,现在使用Babel 7 polyfill,我甚至无法使Promise.any在Chrome85+中正常工作!
接下来是我所做的事情,
首先,我的webpack.config.js:
module.exports = {
entry: {
index: './src/index.js'
ui:'./src/ui/index.js'
},
output: {
path: path.resolve(__dirname, './dist'),
filename: '[name].js',
libraryTarget: 'umd',
libraryExport: 'default',
umdNamedDefine: true,
library: '[name]'
},
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader'
}
},
...
}
我最初使用的是Babel 6。使用Babel 6时,我可以验证由webpack捆绑的代码(使用Promise.any)适用于Chrome 85+(可能根本没有对Promise.any进行polyfill)。
然后我将Babel 6升级到Babel 7,使用npx babel-upgrade --write
,并进行了一些调整(例如"useBuiltIns": 'usage'
)。然后webpack可以捆绑我的代码,但令我惊讶的是,带有Promise.any()
的捆绑代码甚至无法在Chrome85+上运行。我收到了错误消息“未捕获的(在promise中)拒绝”
以下是我的babelrc文件
{
"env": {
"production": {
"presets": [
[
"@babel/preset-env",
{
"targets": {
"browsers": [
"last 4 Chrome versions",
"last 3 Firefox versions",
]
},
"modules": "commonjs",
"debug": true,
"useBuiltIns": 'usage'
}
]
],
"plugins": [
[
"@babel/plugin-transform-runtime",
{
"corejs": 2,
"regenerator": true
}
]
]
}
}
}
我错在哪里了?