2015-11-04 10 views
23

Ich versuche, ein es6 Modul in header.js zu exportieren:Babel 6.0.20 Module Feature funktioniert nicht in IE8

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

und importieren Sie es in index.js:

import header from "./header.js" 

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

Dann Transformation kommt in index.bundle.js :

var _header = __webpack_require__(129); 

var _header2 = _interopRequireDefault(_header); 

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

Also hier ist das Problem, ie8 wird steigen Expected identifier Ausnahme bei { default: obj }, aber alles ist in Ordnung> = ie9.

Kann ich etwas damit machen?

+1

Ich habe eine vorübergehende Lösung gefunden: 'webpack -p' macht dasselbe mit den zwei babel es3 Plugins. – Bruce

Antwort

28

In Babel 6.x müssen Sie standardmäßig einen expliziten Satz von Transformationen aktivieren. Das Standard-Preset es2015 konvertiert ES6 in ES5, IE8 ist jedoch nicht ES5-kompatibel. In diesem Fall, wenn Sie an der plugins list anschauen, werden Sie sehen

Diese Ihre Eigenschaften konvertieren mit IE8 kompatibel zu sein. Im Allgemeinen in Babel 6.x würden Sie dies tun, indem diese Namen als Teil Ihrer plugins Array vorbei, neben dem presets Array und installieren Sie die Transformationen über

npm install --save-dev babel-plugin-transform-es3-member-expression-literals babel-plugin-transform-es3-property-literals 
+0

Ich installiere die Plugins, füge sie in '.babelrc' hinzu und starte den Build neu. Aber es funktioniert immer noch nicht. Gibt es etwas, das ich vermisse? – Bruce

+1

@Bruce Ein Blick darauf, meine Schritte sind was _should_ funktionieren, aber sie sind nicht. Ich habe einen Fehler eingereicht: https://github.com/babel/babel/issues/2817 – loganfsmyth

+2

Die obige Lösung funktionierte für mich, aber beachten Sie, wenn Sie einen Standard-Modul-Import wie 'Import * von 'jquery' haben, es wird immer noch erweitert als '_jquery2.default', welches das reservierte Schlüsselwort 'default' verwendet, wodurch der IE zerstört wird. – Doug

6

Ich benutze webpack + es3ify-loader als Abhilfe.

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

Ich versuchte diesen Ansatz, aber ich bekomme "Parse Error: Zeile 1: fehlt nach dem Import", macht aber keinen Sinn:/ – gabrielhpugliese

+1

Fixed it, Bestellung zählt :) – gabrielhpugliese

+0

Hinweis: in Webpack2 müssen Sie die 'es3ify' nennen loader als 'es3ify-loader' - und' babel' als 'babel-loader', dauerte eine halbe Stunde um zu verstehen :) –

2

Ich habe auch das Problem, und ich schrieb a webpack plugin, um es zu lösen. Ich wusste nicht wirklich, ob es einen schöneren Weg gibt, damit umzugehen, aber es funktioniert.

Das Modul in node_modules funktioniert auch gut.