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.
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
Mi spiace menzionare che sto usando browserify come modulo bundle – Nani