Babel 6.0.20模块功能在IE8中不起作用

时间:2015-11-04 02:28:49

标签: javascript internet-explorer-8 babeljs

我正在尝试在header.js中导出es6模块:

export default {
    setHeaderHighlight: function (index) {
        // do somethings
    }
};

然后将其导入index.js

import header from "./header.js"

$(function () {
    header.setHeaderHighlight(0);
});

然后转变出现在index.bundle.js

var _header = __webpack_require__(129);

var _header2 = _interopRequireDefault(_header);

function _interopRequireDefault(obj) {
    return obj && obj.__esModule ? obj : { default: obj }; // crash here
}

所以这就是问题,ie8会在Expected identifier处出现{ default: obj }异常,但每件事都可以> = ie9。

我能用这件事做点什么吗?

3 个答案:

答案 0 :(得分:30)

默认情况下,Babel 6.x要求您启用一组明确的转换。标准es2015预设将ES6转换为ES5,但IE8与ES5不兼容。在这种情况下,如果您查看plugins list,您会看到

这些会将您的属性转换为与IE8兼容。通常在Babel 6.x中,您可以将这些名称作为plugins数组的一部分与presets数组一起传递,并通过

安装转换来实现此目的。
npm install --save-dev babel-plugin-transform-es3-member-expression-literals babel-plugin-transform-es3-property-literals

答案 1 :(得分:6)

我使用webpack + es3ify-loader作为解决方法。

loaders: {
  {
    test: /\.jsx?$/,
    exclude: /node_modules/,
    loaders: ['es3ify', `babel?${JSON.stringify(babelQuery)}`],
  },
}

答案 2 :(得分:2)

我也有问题,我写了a webpack plugin来解决它。我真的不知道是否有更好的方法来处理它,但它确实有效。

node_modules中的模块也运行良好。