286 votes

NodeJS prévoit de prendre en charge les modules d'importation / exportation es6 (es2015)

J'ai été à la recherche partout sur l'internet sans une réponse claire pour cela.

Actuellement NodeJS utilise uniquement CommonJS syntaxe pour le chargement des modules, et si vous voulez vraiment utiliser la norme ES2015 modules de syntaxe, soit vous devez transpile à l'avance ou utiliser un module externe de chargeur au moment de l'exécution.

Actuellement, je ne suis pas trop positif à utiliser l'une de ces deux méthodes, sont les NodeJS même les responsables de la planification à l'appui de ES2015 modules ou pas? Je n'ai pas trouvé d'allusion à ce sujet.

Au moment de NodeJS 6.x revendications à l'appui de 96% de la ES2015 de fonctionnalités, mais il n'y a pas de référence à des modules (NodeJS ES2105 lien de support).

Savez-vous si NodeJS en charge ces modules de sortie de la boîte, dans un avenir proche?

320voto

RGraham Points 15305

Mise À Jour Le 13 Septembre 2017

NodeJS 8.5.0 a été publié avec le soutien de mjs fichiers derrière un drapeau:

node --experimental-modules index.mjs

Le plan de ce est de retirer le drapeau de la v10.0 version LTS.

Mise À Jour Le 8 Septembre 2017

NodeJS branche master a été mis à jour avec le support initial pour MES modules:
https://github.com/nodejs/node/commit/c8a389e19f172edbada83f59944cad7cc802d9d5

Il devrait être disponible dans la dernière nightly (ce peut être installé via nvm de courir à côté de votre installation existante):
https://nodejs.org/download/nightly/

Et activé derrière le --experimental-modules drapeau:

package.json

{
  "name": "testing-mjs",
  "version": "1.0.0",
  "description": "",
  "main": "index.mjs" <-- Set this to be an mjs file
}

Ensuite, exécutez:

node --experimental-modules .

--Des Informations Obsolètes. Conservé à des fins historiques--

Mise À Jour Février 2017:

https://medium.com/@jasnell/an-update-on-es6-modules-in-node-js-42c958b890c#.6ye7mtn37

La NodeJS les gars ont décidé que la moins mauvaise solution est d'utiliser l' .mjs extension de fichier. Les plats à emporter à partir de ce qui est:

En d'autres termes, étant donné deux fichiers foo.js et bar.mjs , à l'aide de import * from 'foo' traitera foo.js comme CommonJS tout import * from 'bar' traitera bar.mjs comme un ES6 Module

Et comme pour les montages...

Au stade actuel, il existe toujours un certain nombre de la spécification et la mise en œuvre de questions qui doivent arriver sur l'ES6 et la Machine Virtuelle côté des choses avant Node.js pouvez même commencer travailler jusqu'à une justifiable de mise en œuvre de l'ES6 modules. Le travail est en des progrès, mais il va prendre un certain temps, Nous sommes actuellement à la recherche à environ une année au moins.

Mise À Jour Octobre 2016:

L'un des développeurs sur Node.JS récemment assisté à un TC-39 réunion et a écrit un superbe article sur les bloqueurs de mise en œuvre de Node.JS:

https://hackernoon.com/node-js-tc-39-and-modules-a1118aecf95e

La base de ce qui est:

  • ES Modules sont statiquement analysé, CommonJS sont évalués
  • CommonJS modules permettent de singe brassage des exportations, ES Modules ne sont actuellement pas
  • Il est difficile de détecter ce qui est un Module ES et qu'est-ce que CommonJS sans une certaine forme de saisie de l'utilisateur, mais ils essaient.
  • *.mjs semble la solution la plus probable, à moins qu'ils peuvent détecter avec précision un Module ES sans entrée utilisateur

-- Réponse Originale À Cette Question --

Cela a été une pomme de terre chaude pendant quelques temps. Ligne de fond est que, oui, le Noeud sera éventuellement prendre en charge le ES2015 syntaxe pour l'importation/exportation de modules, probablement lors de la spec pour le chargement des modules est finalisé et approuvé.

Voici un bon aperçu de ce qu'est maintenant NodeJS. Essentiellement, ils doivent s'assurer que la nouvelle spec fonctionne pour le Nœud qui est principalement conditionnelle, synchrone de chargement et aussi HTML, qui est essentiellement asynchrone.

Personne ne sait pour sûr, mais j'imagine Noeud de support import/export pour une charge statique, en plus de la nouvelle - System.import du chargement dynamique tout en conservant require pour le code de legs.

Voici quelques propositions sur la manière dont Nœud peut réaliser ceci:

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X