webpack 2在IE11上不起作用?

时间:2017-05-24 17:37:49

标签: javascript webpack promise internet-explorer-11

我有一个非常基本的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.jsvendor.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文档中找到任何可以解决此问题的内容。

2 个答案:

答案 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/*"]
}