Réagissez avec babel. J'ai cette confusion avec les importations et module.exports. Je suppose que babel lors de la conversion du code ES6 en ES5 convertit les importations et les exportations en require et module.exports respectivement.
Si j'exporte une fonction d'un module et que j'importe la fonction dans un autre module, le code s'exécute correctement. Mais si j'exporte la fonction avec module.exports et l'importe en utilisant "import", l'erreur est lancée au moment de l'exécution en disant que ce n'est pas une fonction.
J'ai concocté un exemple.
// 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");
J'ai utilisé babel avec le préréglage es2015 pour le transcompiler. Cela me donne l'erreur suivante
TypeError non capturé: (0, _animals.Tiger) n'est pas une fonction
Mais si je supprime le module.exports = Tiger;
Et remplacez-le par export { Tiger };
Ça fonctionne bien.
Qu'est-ce que j'oublie ici??
EDIT: J'utilise browserify comme bundler de module.
export { Tiger }
serait équivalent à module.exports.Tiger = Tiger
. Inversement, module.exports = Tiger
serait équivalent à export default Tiger
. Ainsi, lorsque vous utilisez module.exports = Tiger
puis essayez import { Tiger } from './animals'
vous demandez effectivement Tiger.Tiger
.
Si vous souhaitez importer:
module.exports = Tiger
vous pouvez utiliser la construction suivante:
import * as Tiger from './animals'
Ensuite, cela fonctionnera.
Une autre option consiste à modifier l'exportation comme décrit par @Matt Molnar, mais cela n'est possible que si vous êtes l'auteur du code importé.
Pour moi, j'essaie d'appliquer cela à un webpack.config.ts. Ce qui précède ne fonctionne pas import * as X from "./X";
J'ai une autre erreur.
Module.exports avec import es6 pour webpack.config.ts en TypeScript
const getConfig = ( appDir: string, distDir: string, env: any, args: any ): webpack.Configuration => {
const config: webpack.Configuration = {
return config;
};
};
module.exports = getConfig;