webpack 中是否可以有真正动态的 import() ?

jas*_*457 2 javascript dynamic-import webpack

我一直在尝试使用 import() 函数来导入运行时动态的东西。我认为只要我为文件创建一个条目,webpack 就可以足够智能地 import() 正确的模块,但情况似乎并非如此。

有谁知道一种方法来分块条目并使用 import() 语法,为其提供一个变量,并让它在运行时工作?

根本问题的一个简单示例如下:

// works
import( './a.js' ).then(() => console.log('it worked'));

// something is a dynamic variable that changes at runtime
const something = './a.js';
// does not work, even with this simplistic example
import( something ).catch(() => console.log('it did not work'));
Run Code Online (Sandbox Code Playgroud)

Pla*_*256 7

它不起作用,因为尽管它被称为“动态导入”,但它并不遵循该词的含义。“动态”导入的想法是能够在运行时动态导入某些内容,但这里需要注意的是:必须知道要导入的模块。

由于 webpack 会进行静态分析来对这些语句进行延迟加载import(),因此一切都必须是已知的且可预测的,否则 webpack 将无法动态创建异步块。这就是为什么向导入添加变量不起作用的原因。