我有一个非常基本的javascript项目,它使用webpack(^ 2.6.0)作为模块捆绑器。作为供应商模块有一个依赖项,我有一个入口点。我的配置如下:
const path = require('path');
const webpack = require('webpack');
module.exports = {
entry: {
bundle: './modules/main.js',
vendor: ['react']
},
output: {
path: path.join(__dirname, 'build'),
filename: '[name].js',
chunkFilename: '[id].js'
},
plugins: [
new webpack.optimize.CommonsChunkPlugin({
name: "vendor"
})
]
};
这会创建包bundle.js
和vendor.js
。 vendor-bundle还包含webpack-bootstrap-code,它在加载任何模块之前加载。现在,检查引导代码显示第40行,webpack生成
/******/ var resolvedPromise = new Promise(function(resolve) { resolve(); });
不幸的是,IE11上没有Promise,即使你包含一个包含Promise的polyfill(例如import 'babel-polyfill'
)作为入口点的第一件事,或者甚至作为它自己的入口点,它也会永远不会在引导代码运行之前执行,这意味着我不能在IE11上使用此代码,除非我在webpack-bundles之前手动包含Promise-polyfill。不出所料,IE11在我访问任何代码甚至是供应商包之前都会抛出Promise is not defined
错误。
我在这里遗漏了什么或者这是预期的行为吗?我无法在webpack文档中找到任何可以解决此问题的内容。
答案 0 :(得分:5)
这似乎是webpack 2.6.0引入的一个问题,已经发布了一个错误: https://github.com/webpack/webpack/issues/4916
答案 1 :(得分:3)
移动到babel 7时遇到了类似的问题。我没有指定useBuiltIns键,因此没有应用polyfill。
"useBuiltIns": "usage"
是我失踪的重要路线。
"debug": true
对于确定正在应用的填充剂非常有帮助
{
"presets": [
[
"@babel/preset-env",
{
"targets": {
"browsers": ["IE >= 11"]
},
"useBuiltIns": "usage",
"debug": true
}
],
"@babel/preset-react"
],
"plugins": [
"@babel/plugin-proposal-object-rest-spread",
"@babel/plugin-proposal-class-properties",
"@babel/plugin-transform-classes"
],
"ignore": ["/node_modules/*"]
}