想知道我们如何在node.js 8中导入模块 - 我们还在使用require
吗?
或者我们仍然需要babel使用import
?
我一直在四处寻找,但似乎没有答案。如果我们仍然需要使用require,为什么不能实现import
节点?
答案 0 :(得分:37)
简短回答
我们仍在使用require
答案很长
ESM加载已部分登陆于2017年9月发布的节点8.5.0
。因此,它在一段时间内作为实验性功能已成为规范的一部分:请参阅API文档here。注意事项包括需要--experimental-modules
标志以及对模块使用新的.mjs
扩展名。
在ESM加载稳定且功能齐全之前,仍然需要在V8中进行更改,以及我的原始答案,如果您不这样做,我仍然会建议坚持使用CommonJS require
。已经将Babel用于其他东西
有关更多教学解释,请参阅此post
这两种实现方式完全不同,因此除了眼睛之外还有更多内容
需要注意的是,规范(一直到V8)仍然存在问题,因此import
目前无法在没有使用转换程序的情况下在Node中实现
从contributor之一
中查看此评论(2017年2月)目前,在Node.js甚至可以开始构建ES6模块的可支持实现之前,仍然需要在ES6和虚拟机方面发生许多规范和实现问题。工作正在进行中,但需要一些时间 - 我们目前至少要看一年左右。
请记住,转换器只是将ES6模块语法转换为CommonJS模块语法,因此目前没有性能优势。换句话说,如果你还没有Babel管道,那么除了从主动的句法角度来看,创建一个只是为了使用新的import
语法并没有多少动力
有关实施方式有何不同的详细信息,see this write up