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

Bru*_*uce 24 javascript internet-explorer-8 babeljs

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

export default {
    setHeaderHighlight: function (index) {
        // do somethings
    }
};
Run Code Online (Sandbox Code Playgroud)

并导入index.js:

import header from "./header.js"

$(function () {
    header.setHeaderHighlight(0);
});
Run Code Online (Sandbox Code Playgroud)

然后转型出现在index.bundle.js:

var _header = __webpack_require__(129);

var _header2 = _interopRequireDefault(_header);

function _interopRequireDefault(obj) {
    return obj && obj.__esModule ? obj : { default: obj }; // crash here
}
Run Code Online (Sandbox Code Playgroud)

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

有什么我可以做的吗?

log*_*yth 30

默认情况下,Babel 6.x要求您启用一组显式转换.标准es2015预设将ES6转换为ES5,但IE8不兼容ES5.在这种情况下,如果你看一下插件列表,你会看到

这些将转换您的属性以与IE8兼容.通常在Babel 6.x中,您可以通过将这些名称作为plugins数组的一部分传递给数组,presets并通过以下方式安装转换:

npm install --save-dev babel-plugin-transform-es3-member-expression-literals babel-plugin-transform-es3-property-literals
Run Code Online (Sandbox Code Playgroud)

  • 谁投票呢?这个dosnt完全解决了我的问题!在完全相同的地方崩溃. (4认同)
  • 上面的解决方案对我有用,但是请注意,如果你有一个默认的模块导入,例如'import*from'jquery'`,它仍然会扩展为`_jquery2.default`,它使用'default'保留关键字,打破IE. (2认同)

小智 6

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

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