Update 13 September 2017
NodeJS 8.5.0已发布,支持标志后面的mjs文件:
node --experimental-modules index.mjs
计划是删除v10.0 LTS版本的标志 .
Update 8 September 2017
并在 --experimental-modules 标志后面启用:
package.json
{
"name": "testing-mjs",
"version": "1.0.0",
"description": "",
"main": "index.mjs"
}
然后运行:
node --experimental-modules .
过时的信息 . 为了历史目的而留在这里 -
Update February 2017:
NodeJS的人已经确定最不好的解决方案是使用 .mjs 文件扩展名 . 从中得到的结论是:
换句话说,给定两个文件foo.js和bar.mjs,使用import * from'foo'会将foo.js视为CommonJS,而import * from'bar'会将bar.mjs视为ES6模块
至于时间表......
在当前时间点,在Node.js甚至可以开始构建可支持的ES6模块实现之前,仍然需要在ES6和虚拟机方面发生许多规范和实现问题 . 工作正在进行中,但需要一些时间 - 我们目前至少要看一年左右 .
Update October 2016:
Node.JS上的一位开发人员最近参加了TC-39 Session 并撰写了一篇关于阻截者的精彩文章,以实现Node.JS:
从中得出的基本结论是:
ES模块进行静态分析,评估CommonJS
CommonJS模块允许猴子修补导出,ES模块目前不允许
很难在没有某种形式的用户输入的情况下检测什么是ES模块以及什么是CommonJS,但他们正在尝试 .
*.mjs 似乎是最可能的解决方案,除非他们能够在没有用户输入的情况下准确检测ES模块
原始答案 -
这已经是相当长一段时间的烫手山芋 . 最重要的是,Node最终将支持用于导入/导出模块的ES2015语法 - 最有可能在spec for loading modules最终确定并达成一致时 .
这是持有NodeJS的a good overview . 本质上,他们需要确保新规范适用于Node,主要是条件,同步加载以及主要是异步的HTML .
目前没有人确切知道,但我想Node除了动态加载的新 System.import 之外还支持静态加载 import/export ,同时仍保留遗留代码的 require .
以下是有关Node如何实现此目标的一些建议: