NodeJS planeja dar suporte aos módulos es6 (es2015) de importação / exportação

Eu tenho procurado por toda a internet sem uma resposta clara para isso.

Atualmente, o NodeJS usa apenas a syntax do CommonJS para carregar módulos e, se você realmente quiser usar a syntax padrão dos módulos ES2015, terá que fazer o transpile antes ou usar um carregador de módulo externo no tempo de execução.

Atualmente não sou muito positivo para usar qualquer um desses dois methods, os mantenedores do NodeJS estão planejando dar suporte a módulos do ES2015 ou não? Eu não encontrei uma sugestão sobre isso.

No momento, o NodeJS 6.x afirma suportar 96% dos resources do ES2015, mas não há nenhuma referência aos módulos ( link de suporte do NodeJS ES2105 ).

Você sabe se o NodeJS suportará esses módulos imediatamente, no futuro próximo?

Atualização 13 de setembro de 2017

O NodeJS 8.5.0 foi lançado com suporte para arquivos mjs por trás de um sinalizador:

 node --experimental-modules index.mjs 

O plano para isso é remover o sinalizador para a liberação L10 v10.0.

Atualização 8 de setembro de 2017

O ramo principal do NodeJS foi atualizado com o suporte inicial para módulos do ESM:
https://github.com/nodejs/node/commit/c8a389e19f172edbada83f59944cad7cc802d9d5

Isso deve estar disponível no mais recente nightly (isso pode ser instalado via nvm para executar ao lado de sua instalação existente):
https://nodejs.org/download/nightly/

E ativado por trás da --experimental-modules :

package.json

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

Então corra:

 node --experimental-modules . 

- Informações desatualizadas. Mantido aqui para fins históricos

Atualização de fevereiro de 2017:

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

Os caras do NodeJS decidiram que a solução menos ruim é usar a extensão de arquivo .mjs . O takeaway disto é:

Em outras palavras, dado dois arquivos foo.js e bar.mjs , usar import * from 'foo' tratará foo.js como CommonJS enquanto import * from 'bar' tratará bar.mjs como um módulo ES6

E quanto aos prazos ...

No momento atual, ainda há vários problemas de especificação e implementação que precisam acontecer no lado do ES6 e da Máquina Virtual antes que o Node.js possa começar a trabalhar em uma implementação suportável dos módulos do ES6. O trabalho está em andamento, mas vai levar algum tempo. No momento, estamos analisando pelo menos um ano.

Atualização de outubro de 2016:

Um dos desenvolvedores do Node.JS participou recentemente de uma reunião do TC-39 e escreveu um excelente artigo sobre os bloqueadores para implementar o Node.JS:

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

A base disso é:

  • Módulos ES são analisados ​​estatisticamente, CommonJS são avaliados
  • Módulos CommonJS permitem exportações de conserto de macacos, os módulos ES atualmente não
  • É difícil detectar o que é um Módulo ES e o que é CommonJS sem alguma forma de input do usuário, mas eles estão tentando.
  • *.mjs parece ser a solução mais provável, a menos que eles possam detectar com precisão um Módulo ES sem input do usuário

- Resposta Original -

Esta tem sido uma batata quente há algum tempo. A conclusão é que sim, o Node irá eventualmente suportar a syntax do ES2015 para importar / exportar módulos - muito provavelmente quando a especificação para o carregamento de módulos for finalizada e acordada.

Aqui está uma boa visão geral do que está segurando o NodeJS. Essencialmente, eles precisam se certificar de que a nova especificação funcione para o Node, que é principalmente condicional, carregamento síncrono e também HTML, que é principalmente asynchronous.

Ninguém sabe ao certo agora, mas imagino que o Node suportará import/export para carregamento estático, além do novo System.import para carregamento dynamic - enquanto ainda mantém a require de código legado.

Aqui estão algumas propostas sobre como o Node pode conseguir isso:

  • Em defesa de .js
  • módulos .mjs