Disons que je veux utiliser Immutable dans mon projet (ou n'importe quel paquet npm donné). Je l'ai npm install
ed, il est donc dans node_modules
. Bien sûr, il y exporte CommonJS. Cependant, je souhaite utiliser les modules es6 dans mon projet.
J'utilise Webpack pour tout compiler ensemble, avec le chargeur 6to5 pour traiter la syntaxe du module es6.
Dans mon fichier source, je dis import Immutable from 'immutable';
---, mais cela pose un problème car es6 import
recherche l'export es6 default
, ce qui n'est pas le cas (pour Immutable ou probablement presque tout autre paquet npm). Le code compilé finit par ressembler à ceci: var Immutable = require('immutable')["default"];
--- ce qui, bien sûr, jette une erreur, car il n’ya pas de propriété default
à rechercher.
Puis-je utiliser les packages npm avec les modules es6?
Babel.js contributeur ici. Vous recherchez le suivant:
import * as Immutable from 'immutable';
// compiles to:
var Immutable = require('immutable');
Remarque: Il s’agit de l’option de modules
common
oucommonInterop
. Pour les autres, voir: https://babeljs.io/docs/usage/modules/
Je viens de le comprendre. (La solution est spécifique à un outil --- mais les modules es6 n'existent maintenant que dans la mesure où ils sont activés par un outil, je pense donc que cela suffit d'une "réponse")
La transpilation de module par défaut de 6to5 utilise l'option common
, ce qui entraîne le problème que j'ai décrit précédemment. Mais il existe une autre option: commonInterop
- qui doit avoir été construite pour gérer exactement la situation à laquelle je suis confronté. Voir https://6to5.github.io/modules.html#common-interop
Donc, trois acclamations pour 6to5.