web-dev-qa-db-fra.com

Module d'import nodejs 8 - Requiert ou importe?

Je me demande simplement comment importer un module dans node.js 8 - utilisons-nous toujours require?

Ou avons-nous encore besoin de babel pour utiliser import?

J'ai fouillé mais ne semble pas avoir de réponse. Si nous devons toujours utiliser require, pourquoi le nœud ne peut-il pas encore implémenter import?

36
laukok

UPDATE-2018.11.15 ↓

Réponse courte
Nous utilisons toujours require

Réponse longue
Le chargement ESM est partiellement atterri dans le noeud 8.5.0 qui est sorti en septembre 2017. En tant que tel, il fait partie des spécifications en tant que fonctionnalité expérimentale depuis un moment: voir la documentation de l'API ici . Les mises en garde incluent la nécessité du --experimental-modules drapeau et l’utilisation d’un nouveau .mjs extension pour les modules.

Des modifications doivent encore être apportées dans la V8 avant que le chargement ESM soit stable et complet. Par conséquent, comme dans ma réponse d'origine, je vous conseillerais de rester sur CommonJS require si vous n'utilisez pas déjà Babel pour d'autres tâches

Voir ceci post pour une explication plus didactique


RÉPONSE PRÉCÉDENTE ↓

Les deux implémentations sont complètement différentes sous le capot.

La conclusion est qu’il reste toujours des problèmes/questions sur les spécifications (jusqu’à la V8), et en tant que tel, import ne peut actuellement pas être implémenté dans Node sans utiliser transpiler

Voir ce commentaire (daté de février 2017) de l’un des contributeur :

À l’heure actuelle, il reste encore un certain nombre de problèmes de spécification et d’implémentation à résoudre du côté de l’ES6 et de la machine virtuelle avant que Node.js puisse même commencer à travailler sur une implémentation supportable de modules ES6. Les travaux sont en cours, mais cela va prendre du temps - nous en sommes actuellement à au moins un an.

N'oubliez pas que transpilers convertit simplement la syntaxe du module ES6 en syntaxe du module CommonJS. Il n'y a donc aucun avantage en termes de performances. En d'autres termes, si vous ne possédez pas déjà de pipeline Babel, il n'y a pas beaucoup d'incitations à en créer un juste pour utiliser la nouvelle syntaxe proposée import, sauf d'un point de vue syntaxique proactif.

Pour plus de détails sur les différences d’implémentation, voir cet article

37
kuzyn