(async function(){
// since we are in an async function we can use 'await' here:
let someModule = await import("some-module")
console.log(someModule.default())
})()
let someModule = await import("some-module")
// because you have already 'await'ed
// you may immediately use someModule,
// whereas previously was not "loaded"
console.log(someModule.default())
2条答案
按热度按时间mhd8tkvw1#
**目前,您不能使用静态
import
语句(例如import someModule from "some-module"
)。**我不知道有任何努力/票证/拉取请求/意图来更改这一点。您可以使用
import()
语法来加载模块!这将返回一个promise。因此,例如,您可以创建一个变量someModule
,开始导入,&在导入完成后,将someModule
设置为该模块:或者,您可以直接在承诺处理程序中使用导入:
对于更复杂的示例,可能需要使用异步立即调用函数表达式,因此可以使用
await
语法:最后,如果你用
--experimental-repl-await
标志启动Node.JS,你可以直接从repl使用async & drop立即调用的async函数:rta7y2nd2#
考虑到import语句的静态特性,引擎需要知道所有的静态导入(在处理任何与import无关的代码之前),你可以看到import语句是如何与交互式REPL支持不兼容的。
例如,import语句可以出现在文件的中间或结尾,但是它们会在“非静态导入相关代码”之前被提升和处理。
如果您在REPL会话结束时键入一个静态import语句,REPL应该怎么做?
考虑到这个潜在的根本性变化,它不能轻易地返回并重新运行之前的所有命令!
直到阅读到这篇文章,我才想到这一点。谢谢凯文·钱,他也有想法。