Модули можно загружать динамически в любом месте другого модуля. В этом случае надо помнить, что модуль загружается асинхронно, а результат функции import будет представлять объект Promise, результатом которого собственно и будет загружаемый модуль.
import("путь_к_модулю").then((module) =&ggt; {
// действия с модулем
});
Также можно использовать оператор await для получения объекта модуля:
let module = await import("путь_к_модулю");
Например, пусть у нас определен следующий модуль message.js:
export const hello = "Hello Work!";
export default function sayHello() {
console.log("Hello METANIT.COM");
}
Здесь экспортируются константа hello и функция sayHello(), причем функция экспортируется по умолчанию.
Динамически подключим этот модуль в другой модуль main.js:
console.log("Main module starts");
import("./message.js").then((module) => {
module.default();
console.log(module.hello);
});
console.log("Main module ends");
Здесь функция в методе then() в качестве параметра получает загруженный модуль. Далее мы можем обращаться к компонентам модуля по имени. Например, обращение к константе hello
module.hello
Однако если какой-то компонент экспортируется по умолчанию, то для обращения к нему применяется ключевое слово default. Так, поскольку
функция sayHello() экспортируется по умолчанию, то выражение:
module.default();
фактически будет представлять вызов данной функции.
Консольный вывод программы:
Main module starts Main module ends Hello METANIT.COM Hello Work!
Также в данном случае можно было бы применить оператор await для получения загруженного модуля:
console.log("Main module starts");
const module = await import("./message.js");
module.default();
console.log(module.hello);
console.log("Main module ends");
Динамческая загрузка модулей открывает нам возможность загружать модули в различных ситуациях, в том числе и в функциях, циклических и условных конструкциях и в других частях пограммы. Например, мы могли бы загружать модуль в зависимости от условия:
const hour = new Date().getHours();
if(hour < 17){
const module = await import("./message.js");
console.log(module.hello);
}
else{
console.log("Go home");
}
В данном случае получаем текущий час. И если он меньше 17, то загружаем модуль и выводим значение константы hello из загруженного модуля. Иначе выводим некоторую строку.