web-dev-qa-db-fra.com

Différence entre System.import () et import ()?

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 (Ou System.import). Cette API sera l'équivalent natif des variations require 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 de System.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().

17
Everettss

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.

4
loganfsmyth

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é.

2