2014-12-04 21 views
22

Diciamo che voglio usare Immutable nel mio progetto (o qualsiasi pacchetto npm dato). Ho npm install ed esso, quindi è in node_modules. Ovviamente, ha le esportazioni di CommonJS lì. Io, tuttavia, voglio usare i moduli es6 nel mio progetto.Come utilizzare il pacchetto npm con il modulo es6 tramite Webpack e 6to5?

Sto usando Webpack per compilarlo tutto insieme, con il 6to5-loader per gestire la sintassi del modulo es6.

Nel mio file sorgente, dico import Immutable from 'immutable'; --- ma questo causa un problema perché l'ES6 import è alla ricerca di un ES6 default essere stato esportato, che non è il caso (per Immutabile o probabilmente qualsiasi altro NPM pacchetto). Il codice compilato ha un aspetto simile al seguente: var Immutable = require('immutable')["default"]; --- che ovviamente genera un errore, poiché non è disponibile la proprietà default.

Posso consumare i pacchetti npm con i moduli es6?

risposta

30

Babel.js contributore qui. Stai cercando il seguente:

import * as Immutable from 'immutable'; 
// compiles to: 
var Immutable = require('immutable'); 

Interactive demo

Nota: questo è con l'opzione common o commonInterop moduli. Per altri, vedi: https://babeljs.io/docs/usage/modules/

+0

Quindi si consiglia di utilizzare la sintassi 'import * as Immutable' OVER usando' commonInterop' e la sintassi 'import immutable' che ho descritto? La sintassi 'import * as Immutable' che cosa funzionerà nell'eventuale" cosa reale "? – davidtheclark

+1

'commonInterop' diventerà probabilmente il [valore predefinito] (https://github.com/6to5/6to5/issues/242). Continuo a raccomandare di scriverlo in questo modo perché fino a quando le tue dipendenze sono scritte con es6 è più corretto (spec-saggio) scriverlo come 'import * as'. –

0

Appena capito. (La soluzione è specifica per gli strumenti --- ma i moduli es6 esistono solo ora in quanto sono abilitati agli strumenti, quindi penso che sia abbastanza di una "risposta".)

Il modulo predefinito di 6to5 transpilation utilizza l'opzione common, che risulta nel vero problema che ho lamentato sopra. Ma c'è un'altra opzione: commonInterop --- che deve essere stata costruita per affrontare esattamente la situazione con cui ho a che fare. Vedi https://6to5.github.io/modules.html#common-interop

Quindi tre applausi per 6to5.

Problemi correlati