我一直在寻找互联网上没有明确的答案 .
目前NodeJS仅使用CommonJS语法来加载模块,如果您真的想使用标准的ES2015模块语法,您必须事先将其转换为或在运行时使用外部模块加载器 .
目前我不太喜欢使用这两种方法中的任何一种,NodeJS维护者是否计划支持ES2015模块?我还没有找到关于此的暗示 .
目前NodeJS 6.x声称支持96%的ES2015功能,但没有任何模块参考(NodeJS ES2105 support link) .
你知道NodeJS是否会在不久的将来支持这些模块?
1 回答
Update 13 September 2017
NodeJS 8.5.0已发布,支持标志后面的mjs文件:
计划是删除v10.0 LTS版本的标志 .
Update 8 September 2017
NodeJS主分支已更新,初始支持ESM模块:
https://github.com/nodejs/node/commit/c8a389e19f172edbada83f59944cad7cc802d9d5
这应该是最新的每晚(可以installed via nvm与您现有的安装一起运行):
https://nodejs.org/download/nightly/
并在
--experimental-modules
标志后面启用:package.json
然后运行:
Update February 2017:
https://medium.com/@jasnell/an-update-on-es6-modules-in-node-js-42c958b890c#.6ye7mtn37
NodeJS的人已经确定最不好的解决方案是使用
.mjs
文件扩展名 . 从中得到的结论是:至于时间表......
Update October 2016:
Node.JS上的一位开发人员最近参加了TC-39 Session 并撰写了一篇关于阻截者的精彩文章,以实现Node.JS:
https://hackernoon.com/node-js-tc-39-and-modules-a1118aecf95e
从中得出的基本结论是:
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如何实现此目标的一些建议:
In defense of .js
.mjs modules