J'ai cherché partout sur Internet sans réponse claire à cela.
Actuellement, NodeJS utilise uniquement la syntaxe CommonJS pour charger les modules, et si vous voulez vraiment utiliser la syntaxe des modules ES2015 standard, vous devez soit la transpiler au préalable, soit utiliser un chargeur de module externe lors de l'exécution.
Actuellement, je ne suis pas trop positif pour utiliser l'une de ces deux méthodes, les responsables de NodeJS prévoient-ils même de prendre en charge les modules ES2015 ou non? Je n'ai trouvé aucun indice à ce sujet.
Pour le moment, NodeJS 6.x prétend prendre en charge 96% des fonctionnalités ES2015, mais il n'y a aucune référence aux modules ( lien de support NodeJS ES2105 ).
Savez-vous si NodeJS prendra en charge ces modules prêts à l'emploi, dans un avenir proche?
la source
node es2015 modules
, affiche les résultats suivants comme l'un des meilleurs résultats: github.com/nodejs/node/wiki/ES6-Module-Detection-in-Node .Réponses:
Noeud 13.2.0 et supérieur
NodeJS 13.2.0 prend désormais en charge les modules ES sans indicateur 🎉 Cependant, l'implémentation est toujours marquée comme expérimentale, donc utilisez-la en production avec prudence.
Pour activer la prise en charge ESM dans 13.2.0, ajoutez ce qui suit à votre
package.json
:Tous
.js
,.mjs
(ou fichiers sans extension) seront traitées comme ESM.Il existe un certain nombre d'options différentes, autres que l'
package.json
opt-in complet , qui sont toutes détaillées dans la documentation de 13.2.0 .Noeud 13.1.0 et inférieur
Ceux qui utilisent encore des versions plus anciennes de Node peuvent vouloir essayer le chargeur de module esm , qui est une implémentation prête pour la production de la spécification ES Modules pour NodeJS:
Mises à jour détaillées ...
23 avril 2019
Un PR a récemment atterri pour changer la façon dont les modules ES sont détectés: https://github.com/nodejs/node/pull/26745
C'est toujours derrière le
--experimental-modules
drapeau, mais il y a des changements majeurs dans la façon dont les modules peuvent être chargés:package.type
qui peut être soitmodule
oucommonjs
type: "commonjs"
:.js
est analysé comme commonjstype: "module"
:.js
est analysé comme esm--type=[mode]
pour vous permettre de définir le type sur le point d'entrée. Remplacera lepackage.type
point d'entrée..cjs
.module
mode.--es-module-specifier-resolution=[type]
explicit
(par défaut) etnode
--es-module-specifier-resolution=node
pour activer l'algorithme de résolution de spécificateur commonjs--experimental-json-loader
"type": "module"
import 'thing.json'
passera par le chargeur expérimental indépendant du modepackage.main
pour définir un point d'entrée pour un module17 janvier 2019
Le nœud 11.6.0 répertorie toujours les modules ES comme expérimentaux, derrière un indicateur.
13 septembre 2017
NodeJS 8.5.0 a été publié avec la prise en charge des fichiers mjs derrière un indicateur:
Le plan pour cela est de supprimer l'indicateur de la version v10.0 LTS.
--Informations obsolètes. Conservé ici à des fins historiques -
8 septembre 2017
La branche principale NodeJS a été mise à jour avec la prise en charge initiale des modules ESM:
https://github.com/nodejs/node/commit/c8a389e19f172edbada83f59944cad7cc802d9d5
Celui-ci devrait être disponible dans la dernière nuit (il peut être installé via nvm pour fonctionner en parallèle de votre installation existante):
https://nodejs.org/download/nightly/
Et activé derrière le
--experimental-modules
drapeau:package.json
Exécutez ensuite:
Février 2017:
https://medium.com/@jasnell/an-update-on-es6-modules-in-node-js-42c958b890c#.6ye7mtn37
Les gars de NodeJS ont décidé que la moins mauvaise solution était d'utiliser l'
.mjs
extension de fichier. Les enseignements à en tirer sont les suivants:Et quant aux délais ...
Octobre 2016:
L'un des développeurs de Node.JS a récemment assisté à une réunion TC-39 et a rédigé un superbe article sur les bloqueurs à implémenter pour Node.JS:
https://hackernoon.com/node-js-tc-39-and-modules-a1118aecf95e
Le point à retenir de base est:
*.mjs
semble la solution la plus probable, à moins qu'ils ne puissent détecter avec précision un module ES sans intervention de l'utilisateur- Réponse originale -
Cela a été une patate chaude pendant un certain temps. En fin de compte, oui, Node prendra éventuellement en charge la syntaxe ES2015 pour l'importation / exportation de modules - très probablement lorsque les spécifications pour le chargement des modules seront finalisées et acceptées.
Voici un bon aperçu de ce qui retient NodeJS. Essentiellement, ils doivent s'assurer que la nouvelle spécification fonctionne pour Node qui est principalement un chargement synchrone conditionnel et également pour HTML qui est principalement asynchrone.
Personne ne le sait pour le moment, mais j'imagine que Node prendra en charge
import/export
le chargement statique, en plus du nouveauSystem.import
pour le chargement dynamique - tout en conservant lerequire
code hérité.Voici quelques propositions sur la façon dont Node pourrait y parvenir:
la source
.mjs
extension:We have affectionately called these “Michael Jackson Script” files in the past
. Juste au cas où vous entendriez quelqu'un parler des artistes pop lors de la conférence JS.import * from 'foo'
traitera foo.js comme CommonJSimport * as bar from 'bar'
traitera bar.js comme un module ES6. Quelqu'un peut-il expliquer?