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.js
和bar.mjs
,import * 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模块