Модули в JavaScript
Эта статья объясняет модули в JavaScript.
YouTube Video
Модули в JavaScript
Модули в JavaScript — это способ организовать код и разделить его на переиспользуемые компоненты. Используя модули, улучшается читаемость и поддерживаемость кода, а также одна и та же функциональность может быть использована в других проектах. Здесь мы объясняем различные системы модулей, начиная с концепции модулей и заканчивая примерами их использования.
Концепция модулей JavaScript
Изначально JavaScript не имел модульной системы. Однако с ростом приложений стало важным разделять код на более мелкие части для повторного использования. Модуль — это часть кода с определенной функцией, которая может управляться независимо от другого кода, что позволяет разделить его на несколько файлов.
Основные типы модулей
Существует несколько систем модулей в JavaScript. Самыми распространенными являются ES Modules (ESM) и CommonJS.
-
ES-модули — это система модулей, представленная в ECMAScript 2015 (ES6), которая определяет модули с помощью ключевых слов
import
иexport
. Эта система широко используется как на стороне клиента (браузеры), так и на стороне сервера (Node.js). -
CommonJS — это система модулей, главным образом используемая в Node.js. Модули определяются с помощью
require
иmodule.exports
для импорта и экспорта файлов.
Детали ES Modules (ESM)
ES Modules — это стандартная модульная система в JavaScript, которая позволяет легко обмениваться функциональностью между модулями. В браузерах и Node.js эта система используется для определения и импорта модулей.
export
и import
export
— это ключевое слово для предоставления функциональности модуля наружу. import
используется для подключения функциональности, определенной в других модулях.
Пример: Экспорт модуля
Модули могут экспортироваться в ES-модулях
следующим образом.
1// math.mjs
2export function add(a, b) {
3 return a + b;
4}
5export function subtract(a, b) {
6 return a - b;
7}
В этом модуле math.mjs
экспортируются функции add
и subtract
. Эти функции можно импортировать из других модулей.
Здесь .mjs
— это расширение файла, которое явно указывает на JavaScript-файл в формате ES-модулей. В Node.js расширение файла определяет, является ли файл модулем CommonJS
или ES Modules
. Однако, если в файле package.json
указано type: "module"
, файлы с расширением .js
по умолчанию рассматриваются как ES Modules
.
Пример: Импорт модуля
Модули могут быть импортированы в ES Modules
следующим образом.
1// main.mjs
2import { add, subtract } from './math.mjs';
3
4console.log(add(3, 5)); // 8
5console.log(subtract(10, 7)); // 3
Таким образом, используя import
, вы можете легко использовать функции, определенные в других файлах.
Экспорт по умолчанию и именованный экспорт
Существует два способа экспорта модулей. Один из них — это именованный экспорт, а другой — экспорт по умолчанию.
- Именованная экспорт используется для экспорта нескольких функций или переменных из модуля. Вы можете выполнять множественный экспорт, и при импорте вы получаете их с указанными именами.
1// utils.mjs
2export function sum(a, b) {
3 return a + b;
4}
5export function multiply(a, b) {
6 return a * b;
7}
1// main.mjs
2import { sum, multiply } from './utils.mjs';
3
4console.log(sum(4, 6)); // 10
5console.log(multiply(3, 5)); // 15
- Экспорт по умолчанию используется, когда экспортируется одна функция или класс из модуля. При импорте оно может быть получено с любым именем.
1// greet.mjs
2export default function greet() {
3 return "Hello, World!";
4}
1// main.mjs
2import greet from './greet.mjs';
3
4console.log(greet()); // "Hello, World!"
Допускается только один экспорт по умолчанию, но именованный экспорт может экспортировать несколько элементов одновременно.
Пример использования на стороне клиента (в браузере).
Пример: Экспорт модуля
Модули могут экспортироваться в ES-модулях
следующим образом.
1// utils.js
2export function sum(a, b) {
3 return a + b;
4}
5export function multiply(a, b) {
6 return a * b;
7}
В этом модуле utils.js
экспортируются функции sum
и multiply
.
Пример: Импорт модуля
Модули могут быть импортированы на стороне клиента следующим образом.
1<!DOCTYPE html>
2<html lang="ja">
3<head>
4 <meta charset="UTF-8">
5 <title>ES Modules Sample in HTML</title>
6</head>
7<body>
8 <h1>ES Modules Sample</h1>
9 <div id="result"></div>
10
11 <script type="module">
12 import { sum, multiply } from './utils.js';
13
14 const result = `
15 <p>sum(3, 5) = ${sum(3, 5)}</p>
16 <p>multiply(10, 7) = ${multiply(10, 7)}</p>
17 `;
18
19 document.getElementById('result').innerHTML = result;
20 console.log(sum(3, 5)); // 8
21 console.log(multiply(10, 7)); // 70
22 </script>
23</body>
24</html>
- Установив атрибут
type
у тега<script>
в значениеmodule
, можно использовать синтаксис ES-модулей, такой какimport
иexport
, в HTML. - Оператор
import
загружает внешний файлutils.js
и отображает результат.
Подробности о CommonJS
CommonJS — это система модулей, которая в основном используется в Node.js. Модули экспортируются и импортируются с использованием module.exports
и require
.
require
и module.exports
В CommonJS используется module.exports
для экспорта модулей. Кроме того, для работы с модулями из других файлов используется require
.
Пример: Экспорт модуля
Модули могут быть экспортированы в CommonJS
следующим образом.
1// math.js
2module.exports = {
3 add: function(a, b) {
4 return a + b;
5 },
6 subtract: function(a, b) {
7 return a - b;
8 }
9};
Пример: Импорт модуля
Модули могут быть импортированы в CommonJS
следующим образом.
1// main.js
2const math = require('./math.js');
3
4console.log(math.add(4, 7)); // 11
5console.log(math.subtract(9, 2)); // 7
В Node.js CommonJS используется как система модулей по умолчанию, но также поддерживаются ES-модули.
Динамический импорт
В JavaScript модули можно динамически импортировать, используя import()
. Этот метод использует асинхронную обработку для загрузки модулей по необходимости.
Динамические импорты могут выполняться следующим образом.
1async function loadModule() {
2 const math = await import('./math.js');
3 console.log(math.add(5, 3)); // 8
4}
5
6loadModule();
Динамический импорт — это один из способов повышения производительности приложения. Поскольку модули можно загружать по мере необходимости, а не загружать все при начальной загрузке, это ускоряет отображение страницы.
Преимущества модулей
-
Повторное использование кода
- Модульный код может быть повторно использован в других проектах. Создавая модули с общей функциональностью и используя их в нескольких приложениях, вы значительно повышаете эффективность разработки.
-
Улучшенная поддерживаемость
- Разделяя код на модули, проще изменять отдельные функции или части. Управление кодом в небольших единицах упрощает обнаружение и исправление ошибок.
-
Избежание конфликтов имен
- Определение множества переменных и функций в глобальной области видимости может привести к конфликтам имен, но модульность предотвращает это и помогает поддерживать чистоту кода.
-
Управление зависимостями
- Использование модулей позволяет явно управлять зависимостями приложения. Становится очевидно, какой модуль зависит от других модулей, что упрощает понимание структуры кода.
Резюме
Система модулей JavaScript — это мощный инструмент для организации кода и его разделения на повторно используемые компоненты. Понимая разницу между ES Modules и CommonJS и выбирая подходящую систему модулей в соответствии с проектом, вы можете повысить читаемость и поддерживаемость кода. Кроме того, использование динамических импортов позволяет оптимизировать производительность приложения.
Давайте использовать систему модулей для создания более масштабируемых и эффективных JavaScript-приложений.
Вы можете следовать этой статье, используя Visual Studio Code на нашем YouTube-канале. Пожалуйста, также посмотрите наш YouTube-канал.