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?
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
ybar.mjs
, usar {[7] } tratará afoo.js
como CommonJS mientras queimport * 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:
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