Y a-t-il des avantages en termes de performances à utiliser l'un par rapport à l'autre?
La réponse actuelle est non, car aucun des moteurs de navigateur actuels n'est implémenté à import/export
partir de la norme ES6.
Certains tableaux de comparaison http://kangax.github.io/compat-table/es6/ ne prennent pas cela en compte, donc lorsque vous voyez presque tous les verts pour Chrome, faites juste attention. import
mot-clé de ES6 n'a pas été pris en compte.
En d'autres termes, les moteurs de navigateur actuels, y compris V8, ne peuvent pas importer de nouveau fichier JavaScript à partir du fichier JavaScript principal via une directive JavaScript.
(Il se peut que nous ne soyons encore qu'à quelques bugs ou dans des années jusqu'à ce que V8 implémente cela selon la spécification ES6.)
Ce document est ce dont nous avons besoin, et ce document est ce que nous devons obéir.
Et la norme ES6 a dit que les dépendances du module devraient être là avant de lire le module comme dans le langage de programmation C, où nous avions des .h
fichiers (en-têtes) .
Il s'agit d'une structure bonne et bien testée, et je suis sûr que les experts qui ont créé la norme ES6 avaient cela en tête.
C'est ce qui permet à Webpack ou à d'autres groupeurs de packages d'optimiser le bundle dans certains cas spéciaux et de réduire certaines dépendances du bundle qui ne sont pas nécessaires. Mais dans les cas où nous avons des dépendances parfaites, cela ne se produira jamais.
Il faudra un certain temps jusqu'à ce que import/export
le support natif soit mis en ligne, et le require
mot - clé n'ira nulle part longtemps.
Qu'est-ce que c'est require
?
C'est une node.js
façon de charger des modules. ( https://github.com/nodejs/node )
Le nœud utilise des méthodes au niveau du système pour lire les fichiers. Vous comptez essentiellement sur cela lors de l'utilisation require
. require
se terminera par un appel système comme uv_fs_open
(dépend du système final, Linux, Mac, Windows) pour charger le fichier / module JavaScript.
Pour vérifier que cela est vrai, essayez d'utiliser Babel.js, et vous verrez que le import
mot - clé sera converti en require
.
node --experimental-modules index.mjs
vous permet d'utiliserimport
sans Babel et fonctionne dans Node 8.5.0+. Vous pouvez (et devez) également publier vos packages npm en tant que ESModule natif , avec une compatibilité descendante pour l'anciennerequire
méthode.