NodeJS planea admitir módulos de importación / exportación es6 (es2015)


He estado buscando por todo el Internet sin una respuesta clara para esto.

Actualmente NodeJS solo usa sintaxis CommonJS para cargar módulos, y si realmente desea usar la sintaxis estándar de módulos ES2015, debe transpilarla de antemano o usar un cargador de módulos externo en tiempo de ejecución.

Actualmente no estoy muy seguro de usar ninguno de esos dos métodos, ¿los mantenedores de NodeJS planean soportar módulos ES2015 o no? No he encontrado ninguna pista sobre este.

En este momento NodeJS 6.x afirma admitir el 96% de las características de ES2015, pero no hay ninguna referencia a los módulos (NodeJS ES2105 support link).

¿Sabe si NodeJS admitirá estos módulos de forma inmediata en un futuro próximo?

Author: Bergi, 2016-05-10

1 answers

Actualización 13 Septiembre 2017

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

node --experimental-modules index.mjs

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

Actualización del 8 de septiembre de 2017

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

Esto debe ser disponible en la última versión de nightly (esto puede ser instalado a través de nvm para ejecutarse junto con su instalación existente):
https://nodejs.org/download/nightly /

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

Paquete.json

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

Luego ejecutar:

node --experimental-modules .

--Información Obsoleta. Guardado aquí para propósitos históricos {

Actualización de Febrero 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 menos mala es usar la extensión de archivo .mjs. La conclusión de esto es:

En otras palabras, dados dos archivos foo.js y bar.mjs, usar {[7] } tratará a foo.js como CommonJS mientras que import * from 'bar' tratará bar.mjs como un módulo ES6

Y en cuanto a los plazos...

At el momento actual en el tiempo, todavía hay una serie de cuestiones de especificación e implementación que deben ocurrir en el ES6 y el lado de la Máquina virtual de las cosas antes del nodo.js puede incluso comenzar trabajando en una implementación soportable de módulos ES6. El trabajo está en progreso, pero va a tomar algún tiempo-Actualmente estamos buscando alrededor de un año al menos.

Actualización de Octubre 2016:

Uno de los desarrolladores en el nodo.JS recientement attended a Reunión TC-39 y escribió un excelente artículo sobre los bloqueadores para implementar para el nodo.JS:

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

El punto básico es: {[18]]}

  • Los módulos ES se analizan estáticamente, los CommonJS se evalúan
  • Los módulos CommonJS permiten exportaciones de parches monkey, los módulos ES actualmente no
  • Es difícil detectar qué es un módulo ES y qué es CommonJS sin alguna forma de usuario de entrada, pero lo están intentando.
  • *.mjs parece la solución más probable, a menos que puedan detectar con precisión un módulo ES sin la entrada del usuario

-- Respuesta original {

Esta ha sido una patata caliente durante bastante tiempo. La conclusión es que sí, Node eventualmente soportará la sintaxis ES2015 para importar/exportar módulos, muy probablemente cuando la especificación para cargar módulos esté finalizada y acordada.

Aquí está un buen resumen de lo que está reteniendo a NodeJS. Esencialmente, necesitan asegurarse de que la nueva especificación funciona para el nodo que es principalmente condicional, carga síncrona y también HTML que es principalmente asíncrono.

Nadie lo sabe con seguridad en este momento, pero imagino que Node soportará import/export para la carga estática, además del nuevo System.import para la carga dinámica, mientras mantiene require para el código heredado.

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

 270
Author: CodingIntrigue,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-13 07:14:28