web-dev-qa-db-fra.com

La fonctionnalité des modules Babel 6.0.20 ne fonctionne pas dans IE8

J'essaie d'exporter un module es6 dans header.js:

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

Et importez-le dans index.js:

import header from "./header.js"

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

Puis la transformation sort en index.bundle.js:

var _header = __webpack_require__(129);

var _header2 = _interopRequireDefault(_header);

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

Voici donc le problème, ie8 augmentera d'un Expected identifier Exception à { default: obj }, mais tout va bien> = ie9.

Puis-je faire quelque chose avec ça?

24
Bruce

Par défaut, Babel 6.x vous oblige à activer un ensemble explicite de transformations. Le standard es2015 preset convertit ES6 en ES5, mais IE8 n'est pas compatible ES5. Dans ce cas, si vous regardez la liste des plugins , vous verrez

Ceux-ci convertiront vos propriétés pour qu'elles soient compatibles avec IE8. Généralement, dans Babel 6.x, vous feriez cela en passant ces noms dans votre tableau plugins, à côté du tableau presets et en installant les transformations via

npm install --save-dev babel-plugin-transform-es3-member-expression-literals babel-plugin-transform-es3-property-literals
30
loganfsmyth

J'utilise webpack + es3ify-loader comme solution de contournement.

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

J'ai aussi le problème, et j'ai écrit n plugin webpack pour le résoudre. Je ne savais pas vraiment s'il y avait une meilleure façon de le gérer, mais cela fonctionne.

Le module dans node_modules fonctionne également bien.

2
brycehq