Zor*_*one 264 javascript module node.js ecmascript-6 es6-modules
我一直在寻找互联网,没有明确的答案.
目前使用的NodeJS只CommonJS的语法来加载模块,如果你真的想使用标准ES2015模块语法,你要么必须事先transpile,或在运行时使用外部模块加载.
目前我不太喜欢使用这两种方法,NodeJS维护者是否计划支持ES2015模块?我还没有找到关于此的暗示.
目前NodeJS 6.x声称支持96%的ES2015功能,但没有任何模块参考(NodeJS ES2105支持链接).
你知道NodeJS是否会在不久的将来支持这些模块?
Cod*_*gue 290
2019年1月17日更新
节点11.6.0仍然将ES模块列为实验,在标志后面.
那些寻找问题解决方案的人可能想尝试使用esm模块加载器,这是ESJ模块规范NodeJS的生产就绪实现:
node -r esm main.js
Run Code Online (Sandbox Code Playgroud)
2017年9月13日更新
NodeJS 8.5.0已经发布,支持标志后面的mjs文件:
node --experimental-modules index.mjs
Run Code Online (Sandbox Code Playgroud)
计划是删除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
}
Run Code Online (Sandbox Code Playgroud)
然后运行:
node --experimental-modules .
Run Code Online (Sandbox Code Playgroud)
- 过时的信息.为了历史目的而留在这里 -
2017年2月更新:
https://medium.com/@jasnell/an-update-on-es6-modules-in-node-js-42c958b890c#.6ye7mtn37
NodeJS的人已经确定最不好的解决方案是使用package.type
文件扩展名.从中得到的结论是:
换句话说,考虑到两个文件
module
和commonjs
使用type: "commonjs"
将视.js
作为CommonJS的同时,type: "module":
将把.js
作为ES6模块
至于时间表......
在当前时间点,在Node.js甚至可以开始构建可支持的ES6模块实现之前,仍然需要在ES6和虚拟机方面发生许多规范和实现问题.工作正在进行中,但需要一些时间 - 我们目前至少要看一年左右.
2016年10月更新:
Node.JS上的一位开发人员最近参加了一次TC-39会议,并撰写了一篇关于阻截者的精彩文章来实现Node.JS:
https://hackernoon.com/node-js-tc-39-and-modules-a1118aecf95e
从中得出的基本结论是:
--type=[mode]
似乎是最可能的解决方案,除非他们能够在没有用户输入的情况下准确检测ES模块- 原始答案 -
这已经是一段时间的烫手山芋.最重要的是,Node最终将支持用于导入/导出模块的ES2015语法 - 最有可能在加载模块的规范最终确定并达成一致时.
以下是对 NodeJS的持有情况的一个很好的概述.从本质上讲,他们需要确保新规范适用于Node,主要是条件,同步加载以及主要是异步的HTML.
现在没有人确切知道,但我想Node package.type
除了.cjs
动态加载的新功能外还支持静态加载 - 同时仍然保留module
遗留代码.
以下是有关Node如何实现此目标的一些建议:
归档时间: |
|
查看次数: |
77636 次 |
最近记录: |