2015-12-14 13 views
5

Reagire con babele. Ho questa confusione con importazioni e module.exports. Presumo babel quando si converte il codice ES6 in ES5 converte rispettivamente le importazioni e le esportazioni in require e module.exports.Module.exports ed es6 Import

Se esporto una funzione da un modulo e importa la funzione in un altro modulo, il codice viene eseguito correttamente. Ma se esporto la funzione con module.exports e import con "import" l'errore viene generato in fase di esecuzione dicendo che non è una funzione.

Ho preparato un esempio.

// Tiger.js 
function Tiger() { 
    function roar(terrian){ 
     console.log('Hey i am in ' + terrian + ' and i am roaing'); 
    }; 
    return roar; 
} 

module.exports = Tiger; 

// animal.js 
import { Tiger } from './animals'; 

var animal = Tiger(); 
animal("jungle"); 

Ho usato babel con il preset es2015 per transcompilarlo. Questo mi dà il seguente errore

Uncaught TypeError: (0 , _animals.Tiger) is not a function

Ma se mi tolgo la module.exports = Tiger; e sostituirlo con export { Tiger }; Funziona benissimo.

Cosa mi manca qui ??

MODIFICA: Sto usando browserify come il modulo di raggruppamento.

+0

Hai guardato l'uscita Babel? Guardando la fonte transpiled di 'Tiger.js' ti dirò immediatamente perché non funziona. Per farla breve: bastone con un sistema di moduli o utilizzare un bundler di moduli come webpack che si occuperà delle incoerenze. – GJK

+0

Mi spiace menzionare che sto usando browserify come modulo bundle – Nani

risposta

2

export { Tiger } equivale a module.exports.Tiger = Tiger. Al contrario, module.exports = Tiger equivale a export default Tiger. Pertanto, quando si utilizza module.exports = Tiger e si prova import { Tiger } from './animals', si sta effettivamente chiedendo il Tiger.Tiger.

+0

quindi quale sarebbe la dichiarazione di importazione corretta qui? sarebbe solo "importare Tiger da"./animals "? –

+0

Credo di sì, supponendo che tu non volessi cambiare tiger.js –