在 Node.js 中使用原生 ES 模块方法解析
从版本8.5.0开始,Node.js开始支持原生ES模块,可以通过命令行选项打开该功能。新功能很大程度上得归功于BradleyFarias。
1.演示
这个示例的代码目录结构如下:
esm-demo/ lib.mjs main.mjs
lib.mjs:
exportfunctionadd(x,y){ returnx+y; }
main.mjs:
import{add}from'./lib.mjs'; console.log('Result:'+add(2,3));
运行演示:
$node--experimental-modulesmain.mjs Result:5
2.清单:需要注意的事情
ES模块:
·不能动态导入模块。但是动态import()的相关工作正在进行中,应该很快就能提供支持。
·没有元变量,如__dirname和__filename。但是,有一个的类似功能的提案:“import.meta”。看起来可能是这样:
console.log(import.meta.url);
·现在所有模块标识符都是URL(这部分在Node.js是新增的):
与CJS模块的互操作性
你可以导入CJS模块,但它们总是只有默认的导出-即module.exports的值。让CJS模块支持命名导出已经在做了,但可能需要一段时间。如果你能帮忙,可以来做。
importfs1from'fs'; console.log(Object.keys(fs1).length);//86 import*asfs2from'fs'; console.log(Object.keys(fs2));//['default']
·不能在ES模块中使用require()。主要原因是:
3.早期版本的Node.js上的ES模块
如果要在8.5.0之前的Node.js版本上使用ES模块,请参阅John-DavidDalton的@std/esm。
提示:如果不启用任何可解锁的额外功能,将在Node.js保持100%兼容原生ES模块.
FAQ
什么时候可以不带命令行选项使用ES模块?
目前的计划是在Node.js10LTS中默认可使用ES模块。
进一步阅读
有关Node.js和浏览器中ES模块的更多信息:
即将到来的ECMAScript提案:
总结
以上就是小编给大家带来的在Node.js中使用原生ES模块方法解析的全部内容,希望对大家有所帮助。如果您有什么问题,可以给我留言。感谢大家对本站的支持。