09 Модуль - Node.js, NPM, Webpack -- 03 Модульность кода Flashcards
Наиболее важные преимущества модулей это
поддерживаемость, пространство имен и повторное использование.
Модульный код пытаются разбить на файлы, в каждом из которых
код, который выполняет отдельный функционал.
Сборка модулей — это процесс
конкатенации группы модулей, в один или группу файлов.
Обычно код делят на папки и файлы. Наличие отдельных тегов script для каждого файла означает, что
браузер будет загружать каждый файл по отдельности, что негативно сказывается на скорости загрузки страницы. Чтобы обойти эту проблему, файлы объединяются в один или пару файлов, чтобы уменьшить количество запросов.
Каждый JS-файл хранит код в уникальном контексте модуля. Для того чтобы описать интерфейс модуля используется
объект module.exports, значение которого будет доступно для использования другими модулями при импорте.
Для того чтобы получить интерфейс модуля в коде (импортировать), используется функция
require(‘путь-к-модулю’). Результатом своего выполнения require вернет интерфейс модуля — то что в модуле указано в module.exports.
Операции экспорта сущностей и импорта интерфейса модуля реализованы конструкциями
import from и export.
Модуль может экспортировать несколько сущностей, которые отличаются своими именами и называются
именованными экспортами(Named export)
Чтобы импортировать именованные экспорты в другой модуль, необходимо
знать имена экспортируемых сущностей, которые мы хотим импортировать.
Первый способ экспортировать это использовать
ключевое слово export перед всеми сущностями которые необходимо экспортировать. Они будут добавлены как свойства в экспортируемый объект. При импорте мы деструктуризируем свойства из импортируемого объекта.
Пример:
// myModule.js
const sqrt = Math.sqrt;
export const square = x => x * x;
export const diag = (x, y) => sqrt(square(x) + square(y));
// main.js import { square, diag } from './path/to/myModule';
console. log(square(11)); // 121
console. log(diag(4, 3)); // 5
Второй способ это явно указать объект со
свойствами для экспорта Пример: // myModule.js const sqrt = Math.sqrt; const square = x => x * x; const diag = (x, y) => sqrt(square(x) + square(y));
export { square, diag };
// main.js import { square, diag } from './path/to/myModule';
console. log(square(11)); // 121
console. log(diag(4, 3)); // 5
Следующий синтаксис импортирует все экспорты модуля как объект с указанным именем.
// main.js import * as myModule from './path/to/myModule';
console. log(myModule.square(11)); // 121
console. log(myModule.diag(4, 3)); // 5
Экспорт по умолчанию(Default export) — это
самое главное экспортируемое значение, которое может быть чем угодно: переменной, функцией, классом и т. д.
Some differences that might make you choose one over the other:
Named Exports:
Default Exports:
Named Exports : {
- Can export multiple values
- MUST use the exported name when importing}
Default Exports : {
- Export a single value
- Can use any name when importing}