Що таке модуль у Node.js?
1. Що таке модуль
У Node.js кожен файл - це окремий модуль.
Коли ти створюєш файл math.js, Node.js автоматично обгортає його у внутрішню функцію:
(function (exports, require, module, __filename, __dirname) {
// твій код
});Завдяки цьому:
- у кожного файлу своя область видимості (немає глобальних змінних);
- ти можеш експортувати назовні тільки те, що потрібно;
- ти можеш імпортувати код з інших модулів.
2. Типи модулів у Node.js
| Тип | Приклади | Опис |
|---|---|---|
| Вбудовані (core modules) | fs, path, os, http, events, crypto | Постачаються разом із Node.js |
| Користувацькі (user modules) | ./math.js, ./config.js | Твої файли й утиліти |
| Сторонні (third-party) | express, mongoose, chalk | Встановлюються через npm |
3. CommonJS-модулі (за замовчуванням)
math.js
const PI = 3.14;
function add(a, b) {
return a + b;
}
module.exports = { PI, add };app.js
const math = require('./math');
console.log(math.add(2, 3)); // 5
console.log(math.PI); // 3.14Тут:
module.exports→ об'єкт, що повертається приrequire();require()→ функція, яка імпортує модуль.
4. ES Modules (сучасний стандарт)
Якщо в package.json вказано "type": "module", можна використовувати синтаксис ES6:
math.js
export const PI = 3.14;
export function add(a, b) {
return a + b;
}app.js
import { add, PI } from './math.js';
console.log(add(2, 3)); // 5
console.log(PI); // 3.14Підтримується нативно з Node.js v13+, але вимагає "type": "module" чи розширення .mjs.
5. Як Node.js завантажує модуль
Коли ти викликаєш require('./math'), Node.js проходить 5 кроків:
- Розв'язання шляху (Path resolution)
Визначає, де знаходиться файл (
.js,.json,.node). - Кешування (Caching) Якщо модуль уже завантажений, повертається з кешу.
- Завантаження (Loading) Node.js читає вміст файлу з диска.
- Обгортання (Wrapping) Код модуля обгортається у внутрішню функцію.
- Виконання (Execution)
Node.js виконує код і повертає
module.exports.
6. Приклад внутрішньої обгортки
Node.js під капотом робить приблизно так:
(function (exports, require, module, __filename, __dirname) {
const PI = 3.14;
module.exports = { PI };
});Завдяки цьому:
- модуль ізольований;
- є доступ до шляхів (
__dirname,__filename); - можна експортувати код через
module.exports.
7. Вбудовані (core) модулі Node.js
| Модуль | Призначення |
|---|---|
fs | Робота з файловою системою |
path | Робота зі шляхами |
os | Інформація про ОС |
http, https | Сервер і запити |
events | Робота з подіями |
crypto | Шифрування |
url | Парсинг URL |
util | Утиліти для налагодження |
Приклад:
const os = require('os');
console.log(os.platform()); // 'win32' чи 'linux'8. Сторонні модулі (npm)
Встановлюються через npm:
npm install chalkВикористання:
import chalk from 'chalk';
console.log(chalk.green('Success!'));Зберігаються в папці node_modules
і перелічуються в package.json.
9. Кешування модулів
Node.js завантажує модуль один раз, а потім бере його з кешу:
require('./math');
require('./math'); // другий виклик не перечитує файлЦе прискорює роботу, але якщо потрібно переініціалізувати модуль, кеш можна очистити:
delete require.cache[require.resolve('./math')];10. Шлях і область видимості
Модуль може бути:
- локальним (
./math.js); - глобальним (вбудований
fs); - встановленим через npm (
express).
Node.js шукає їх у такому порядку:
- Вбудовані (
fs,path); - Локальні (
./чи../); - У
node_modules(з поточної папки вгору по дереву).
11. Приклад реальної структури проєкту
project/
├── package.json
├── app.js
├── config/
│ └── db.js
├── utils/
│ └── logger.js
└── routes/
└── userRoutes.jsУ app.js:
const db = require('./config/db');
const logger = require('./utils/logger');
const routes = require('./routes/userRoutes');Кожен файл - модуль. Кожен модуль експортує свої функції й не "заважає" іншим.
12. Коротке резюме
| Пункт | CommonJS | ES Modules |
|---|---|---|
| Імпорт | require() | import |
| Експорт | module.exports | export |
| Підтримка | За замовчуванням | Через "type": "module" чи .mjs |
| Завантаження | Синхронне | Асинхронне |
| Tree-shaking | Немає | Є |
| Застосування | Старі й серверні проєкти | Сучасні модулі й фронтенд |
Одним реченням
Модуль у Node.js - це незалежний файл із кодом (JS, JSON чи нативним бінарником), який експортує певні дані чи функції і може бути імпортований в інші файли через
require()чиimport.
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.