2015-11-04 13 views
23

Sto cercando di esportare un modulo ES6 in header.js:Babel 6.0.20 I moduli non geometria di lavoro in IE8

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

e importarlo in index.js:

import header from "./header.js" 

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

Poi trasformazione viene fuori 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 
} 

Quindi ecco il problema, ie8 salirà un Expected identifier Eccezione allo { default: obj }, ma tutto è ok> = ie9.

C'è qualcosa che posso fare con questo?

+1

Ho trovato una soluzione temporanea: 'webpack -p' farà la stessa cosa dei due plugin babel es3. – Bruce

risposta

28

Per impostazione predefinita, Babel 6.x richiede l'abilitazione di un insieme esplicito di trasformazioni. La preimpostazione standard es2015 converte ES6 in ES5, tuttavia IE8 non è compatibile ES5. In questo caso, se si guarda alla plugins list, si vedrà

Questi saranno convertire le vostre proprietà per essere compatibile con IE8. In generale, in Babel 6.x faresti questo passando quei nomi come parte del vostro plugins array, a fianco la matrice presets e installare le trasformate tramite

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

Installo i plug-in, li aggiungo in '.babelrc' e riavvia la compilazione. Ma ancora non funziona. C'è qualcosa che mi manca? – Bruce

+1

@Bruce Guardandoci dentro, i miei passi sono ciò che _should_ funziona, ma non lo sono. Ho archiviato un bug: https://github.com/babel/babel/issues/2817 – loganfsmyth

+2

La soluzione sopra ha funzionato per me, ma nota che se hai un modulo predefinito importato come 'import * da 'jquery'', continuerà ad espandersi come '_jquery2.default' che usa la parola chiave riservata 'default', rompendo IE. – Doug

6

Io uso webpack + es3ify-loader come soluzione alternativa.

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

Ho provato questo approccio ma ricevo "Errore Parse: riga 1: mancante dopo l'importazione" ma non ha alcun senso:/ – gabrielhpugliese

+1

risolto, ordine importa :) – gabrielhpugliese

+0

Nota: in Webpack2 è necessario denominare il 'es3ify' loader come 'es3ify-loader' - e' babel' come 'babel-loader', mi ci sono voluti mezz'ora per capire :) –

2

Ho anche il problema, e ho scritto a webpack plugin per risolverlo. Non sapevo davvero se c'è un modo migliore per gestirlo, ma funziona.

Anche il modulo in node_modules funziona correttamente.