dynamicTypeScript导入,不使用Promises

我有这种情况。 他们dynamic的原因是为了防止加载10倍的代码量,我需要加载执行某个命令行任务。

if (diagnostics) { require('./lib/cli-commands/run-diagnostics').run(sumanOpts); } else if (script) { require('./lib/cli-commands/run-scripts').run(sumanConfig, sumanOpts); } else if (tscMultiWatch) { require('./lib/cli-commands/run-tscmultiwatch').run(sumanOpts); } else if (repair) { require('./lib/cli-commands/run-repair').run(sumanOpts); } else if (postinstall) { require('./lib/cli-commands/postinstall').run(sumanOpts); } else{ // etc etc } 

如果我尝试一个dynamic加载导入调用,我得到这个:

在这里输入图像描述

这显然会返回一个Promise而不是module.exports值。

有没有一种方法来使用dynamic导入语法,而无需asynchronous加载或没有?

只要添加到Unional的正确答案,使用Promise返回dynamic导入语法就很容易。

 (async function () { if (diagnostics) { const run = await import('./lib/cli-commands/run-diagnostics'); run(sumanOpts); } else if (script) { const run = await import('./lib/cli-commands/run-scripts'); run(sumanConfig, sumanOpts); } }()); 

请注意,如果您正在使用--module commonjs模块,那么可能最好坚持要求。 但是,以上是完美的--module amd , – 模块--module system ,当然 – --module esnext

由于dynamic导入的性质,它是asynchronous的。

require()是同步的,因为它驻留在服务器端。 您可以使用(例如) fs.readFileSync()同步读取文件。

对于新的dynamic导入,它被devise为在客户端工作,所以会有一个ajax请求返回到服务器来执行导入。

因此它必须是asynchronous的。