【发布时间】:2017-12-12 15:29:24
【问题描述】:
只是想知道我们如何在 node.js 8 中导入模块 - 我们还在使用 require 吗?
或者我们还需要 babel 来使用import吗?
我一直在挖掘,但似乎没有答案。如果还得用require,为什么node还不能实现import呢?
【问题讨论】:
只是想知道我们如何在 node.js 8 中导入模块 - 我们还在使用 require 吗?
或者我们还需要 babel 来使用import吗?
我一直在挖掘,但似乎没有答案。如果还得用require,为什么node还不能实现import呢?
【问题讨论】:
简答
我们仍在使用require
长答案
ESM 加载已部分登陆节点 8.5.0,该节点于 2017 年 9 月发布。因此,它已成为规范的一部分,作为实验性功能有一段时间:请参阅 API 文档 here。注意事项包括需要 --experimental-modules 标志以及为模块使用新的 .mjs 扩展。
在 ESM 加载稳定且功能齐全之前,V8 中仍需要进行一些更改,因此与我最初的答案一样,如果您还没有使用 Babel,我仍然建议您坚持使用 CommonJS require其他东西
请参阅此post 了解更多说明
这两种实现方式在本质上是完全不同的,所以它的作用远不止眼前所见
要点是规范(一直到 V8)仍然存在挥之不去的问题/疑问,因此 import 目前无法在不使用转译器的情况下在 Node 中实现
查看来自contributor 之一的此评论(日期为 2017 年 2 月):
在当前时间点,在 Node.js 甚至可以开始构建可支持的 ES6 模块实现之前,ES6 和虚拟机方面仍有许多规范和实现问题需要解决。工作正在进行中,但需要一些时间 — 我们目前正在考虑至少一年左右。
请记住,转译器只是将 ES6 模块语法转换为 CommonJS 模块语法,因此目前没有性能优势。换句话说,如果你还没有 Babel 管道,那么创建一个只是为了使用新提议的 import 语法的动机并不多,除非从积极的语法角度来看
如需详细了解实现的不同之处,请see this write up
【讨论】: