Динамическая загрузка модулей

Последнее обновление: 19.11.2023

Модули можно загружать динамически в любом месте другого модуля. В этом случае надо помнить, что модуль загружается асинхронно, а результат функции 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 из загруженного модуля. Иначе выводим некоторую строку.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850