NodeJS planea admitir modules de import / export es6 (es2015)

He estado buscando en internet sin una respuesta clara para esto.

Actualmente, NodeJS usa solo la syntax CommonJS para cargar modules, y si realmente desea utilizar la syntax estándar de los modules ES2015, debe transstackrla de antemano o utilizar un cargador de module externo en time de ejecución.

Actualmente, no estoy muy seguro de usar ninguno de esos dos methods, ¿los mantenedores de NodeJS incluso están planeando admitir modules ES2015 o no? No he encontrado una pista sobre esto.

Por el momento, NodeJS 6.x afirma que admite el 96% de las características de ES2015, pero no hay ninguna reference a los modules ( enlace de soporte NodeJS ES2105 ).

¿Sabes si NodeJS admitirá estos modules de manera inmediata en un futuro cercano?

Actualización 13 de septiembre de 2017

NodeJS 8.5.0 ha sido lanzado con soporte para files mjs detrás de una bandera:

 node --experimental-modules index.mjs 

El plan para esto es eliminar la bandera para la versión v10.0 LTS.

Actualización 8 de septiembre de 2017

La twig principal de NodeJS se ha actualizado con soporte inicial para modules de ESM:
https://github.com/nodejs/node/commit/c8a389e19f172edbada83f59944cad7cc802d9d5

Esto debería estar disponible en la última noche (esto se puede instalar a través de nvm para ejecutar junto con su installation existente):
https://nodejs.org/download/nightly/

Y habilitado detrás de la bandera --experimental-modules :

package.json

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

Entonces corre:

 node --experimental-modules . 

– Información actualizada. Mantenido aquí para propósitos históricos–

Actualización de febrero de 2017:

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

Los chicos de NodeJS han decidido que la solución less mala es usar la extensión de file .mjs . El punto de partida de esto es:

En otras palabras, dados dos files foo.js y bar.mjs , el uso de import * from 'foo' tratará a foo.js como CommonJS mientras que la import * from 'bar' tratará a bar.mjs como un Módulo ES6

Y en cuanto a las líneas de time …

En el momento actual, todavía hay una serie de problemas de especificación e implementación que deben suceder en el lado ES6 y Virtual Machine antes de que Node.js pueda incluso comenzar a trabajar en una implementación soportable de modules ES6. El trabajo está en progreso, pero tomará algo de time. Actualmente estamos estudiando alnetworkingedor de un año como mínimo .

Actualización de octubre de 2016:

Uno de los desarrolladores en Node.JS asistió recientemente a una reunión TC-39 y escribió un excelente artículo sobre los bloqueadores para la implementación de Node.JS:

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

La conclusión básica de eso es:

  • Los modules ES se analizan estadísticamente, CommonJS se evalúan
  • Los modules CommonJS permiten exportaciones de parche de monos, los modules de ES actualmente no
  • Es difícil detectar qué es un Módulo ES y qué es CommonJS sin alguna forma de input del usuario, pero lo están intentando.
  • *.mjs parece la solución más probable, a less que puedan detectar con precisión un module de ES sin la input del usuario

– Respuesta original –

Esto ha sido una papa caliente por bastante time. La conclusión es que sí, Node eventualmente admitirá la syntax de ES2015 para importar / exportar modules, muy probablemente cuando las especificaciones para cargar modules estén finalizadas y acordadas.

Aquí hay una buena visión general de lo que detiene NodeJS. Básicamente, deben asegurarse de que la nueva especificación funcione para Node, que es principalmente una carga condicional y sincrónica, y también HTML, que es principalmente asynchronous.

Nadie lo sabe con certeza en este momento, pero me imagino que Node admitirá la import/export para la carga estática, además del nuevo System.import para la carga dinámica, sin dejar de require código henetworkingado.

Aquí hay algunas propuestas sobre cómo Node podría lograr esto:

  • En defensa de .js
  • modules .mjs