NodeJS计划支持导入/导出es6(es2015)模块

我一直在找遍所有的networking,没有一个明确的答案。

目前,NodeJS仅使用CommonJS语法来加载模块,如果您确实要使用标准ES2015模块语法,则必须事先进行传输,或者在运行时使用外部模块加载器。

目前我不太积极地使用这两种方法之一,NodeJS的维护人员是否还计划支持ES2015模块? 我还没有find关于这一点的暗示。

目前,NodeJS 6.x宣称支持96%的ES2015function,但没有提及模块( NodeJS ES2105支持链接 )。

你知道NodeJS在不久的将来会不会支持这些模块?

2017年9月13日更新

NodeJS 8.5.0已经发布,支持标志后面的mjs文件:

 node --experimental-modules index.mjs 

这个计划是为了取消v10.0 LTS版本的标志。

2017年9月8日更新

NodeJS主分支已经更新,初始支持ESM模块:
https://github.com/nodejs/node/commit/c8a389e19f172edbada83f59944cad7cc802d9d5

这应该是最新的每晚(这可以安装通过nvm与现有的安装一起运行):
https://nodejs.org/download/nightly/

并在--experimental-modules标志后面启用:

的package.json

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

然后运行:

 node --experimental-modules . 

– 完整的信息。 留在这里是为了历史的目的 –

2017年2月更新:

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

NodeJS的人已经决定, 最糟糕的解决scheme是使用.mjs文件扩展名。 从这个外卖是:

换句话说,给定两个文件foo.jsbar.mjsimport * from 'foo'使用import * from 'foo'会将foo.js当作CommonJS,而import * from 'bar'会将bar.mjs当作ES6模块

至于时间表…

在目前的时间点上,在Node.js甚至可以开始支持ES6模块的实现之前,还需要在ES6和虚拟机方面发生一些规范和实现问题。 工作正在进行中,但需要一些时间 – 目前我们至less在一年左右。

2016年10月更新:

Node.JS上的开发人员之一最近出席了一个TC-39会议,并撰写了一篇关于拦截器的优秀文章来实现Node.JS:

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

从基本的外套是:

  • ES模块进行静态分析,CommonJS进行评估
  • CommonJS模块允许导出猴子补丁,ES模块目前不支持
  • 在没有用户input的情况下,很难检测什么是ES模块,什么是CommonJS,但是他们正在尝试。
  • *.mjs似乎是最有可能的解决scheme,除非它们能够在没有用户input的情况下精确检测ES模块

– 原始答复 –

这已经是相当长一段时间了。 底线是,是的,节点最终将支持ES2015语法的导入/导出模块 – 最有可能的加载模块的规格是最终确定和约定。

这里有一个关于什么是NodeJS 的好概述 。 从本质上讲,他们需要确保新规范适用于主要是有条件的节点,同步加载以及主要是asynchronous的HTML。

现在还没有人知道,但是我想Node除了支持dynamic加载的新System.import之外,还支持静态加载的import/export ,同时仍然require遗留代码。

以下是关于Node如何实现的一些build议:

  • 为了防御.js
  • .mjs模块