Dans la documentation du webpack 1 est une déclaration que dans le webpack 2 utilisera System.import()
pour la dynamique, il faut:
Heureusement, une spécification de "chargeur" d'API JavaScript est en cours d'écriture pour gérer le cas d'utilisation dynamique:
System.load
(OuSystem.import
). Cette API sera l'équivalent natif des variationsrequire
ci-dessus.
Et pendant ce temps, tout autour du Web était exemples d'utiliser cette System.import()
.
Avant de lancer webpack 2 , les auteurs décident de changer System.import()
en import()
:
ajoutez
import()
comme construction de fractionnement de code. Il doit être utilisé au lieu deSystem.import
Lorsque cela est possible.System.import
Sera déconseillé dans la version webpack 2 (supprimé dans webpack 3) car son comportement est incorrect selon la spécification .
Cette import()
est basée sur la spécification tc39/proposition-dynamique-import , et vous pouvez en savoir plus pourquoi ils ont fait ce changement ici .
Quelqu'un peut-il expliquer la différence entre System.import()
et import()
?
Malgré un nom différent, l'utilisation est identique:
import(modulePath)
.then(module => module.default())
.catch(/* ... */);
System.import(modulePath)
.then(module => module.default())
.catch(/* ... */);
Mais dans weback 2, la doc est: "System.import()
le comportement est incorrect selon les spécifications" - donc cela suggère qu'il y a une différence entre System.import()
et import()
.
La partie importante de votre premier devis est
spécification en cours d'écriture
Lorsque Webpack 1 a implémenté System.import
, La spécification évoluait toujours. Si c'est le cas. Webpack 1 a implémenté System.import
Parce que c'était ce qui était lancé comme API potentielle à l'époque.
Webpack 2 implémente import()
parce que c'est une nouvelle proposition de standardiser une approche syntaxique plutôt basée sur une bibliothèque.
Voici ce que vous recherchez: Proposition d'importation tc39
Une fonction réelle
Les ébauches de la collection d'idées Loader ont à plusieurs reprises eu des fonctions réelles (pas seulement des formes syntaxiques de type fonction) nommées System.import () ou System.loader.import () ou similaire, qui accomplissent les mêmes cas d'utilisation.
Le plus gros problème ici, comme précédemment noté par les éditeurs de la spécification, est de savoir comment interpréter l'argument spécificateur de ces fonctions. Comme ce ne sont que des fonctions, qui sont les mêmes dans tout le domaine et ne varient pas selon le script ou le module, la fonction doit interpréter son argument de la même manière, peu importe d'où il est appelé. (À moins que quelque chose de vraiment bizarre comme l'inspection de la pile ne soit implémenté.) Il est donc probable que cela rencontre des problèmes similaires à ceux de l'URL de base de document pour la fonction importModule ci-dessus, où les spécificateurs de module relatifs deviennent une batterie de bogues et ne correspondent pas aux déclarations d'importation à proximité.