Согласно документации веб-пакета.
Невозможно использовать полностью динамический оператор импорта, такой как import (foo). Поскольку foo может быть любым путем к любому файлу в вашей системе или проекте.
В import () должна быть хотя бы некоторая информация о том, где находится модуль.
https://webpack.js.org/api/module-methods/#dynamic-expressions-in-import.
Так работает приведенный ниже фрагмент.
import("./components/About").then(component => {
console.log(component, "loaded successfully");
});
Нижеприведенный фрагмент не работает.
let a = "./components/About";
import(a).then(component => {
console.log(component, "loaded successfully");
});
Я не могу найти объяснение, в котором говоритсяТочная причина, почему вышеуказанный код работает. Но моя интуиция заключается в том, что webpack не знает о типе данных переменной a
(это должна быть строка), поэтому не может использовать ее при динамическом импорте.
Приведенный выше код переносится в
let a = "./components/About";
__webpack_require__("./src lazy recursive")(a).then(component => {
console.log(component, "loaded successfully");
});
Приведенный ниже код фактически работает (встраивание переменной в строковый литерал) ..
let a = "./components/About";
import(`${a}`).then(component => {
console.log(component, "loaded successfully");
});
И это переносится в.
let a = "./components/About";
__webpack_require__("./src lazy recursive ^.*$")("".concat(a)).then(component => {
console.log(component, "loaded successfully");
});