Skip to main content

Що таке модуль у Node.js?

1. Що таке модуль

У Node.js кожен файл - це окремий модуль.

Коли ти створюєш файл math.js, Node.js автоматично обгортає його у внутрішню функцію:

javascript
(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

javascript
const PI = 3.14; function add(a, b) { return a + b; } module.exports = { PI, add };

app.js

javascript
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

javascript
export const PI = 3.14; export function add(a, b) { return a + b; }

app.js

javascript
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 кроків:

  1. Розв'язання шляху (Path resolution) Визначає, де знаходиться файл (.js, .json, .node).
  2. Кешування (Caching) Якщо модуль уже завантажений, повертається з кешу.
  3. Завантаження (Loading) Node.js читає вміст файлу з диска.
  4. Обгортання (Wrapping) Код модуля обгортається у внутрішню функцію.
  5. Виконання (Execution) Node.js виконує код і повертає module.exports.

6. Приклад внутрішньої обгортки

Node.js під капотом робить приблизно так:

javascript
(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Утиліти для налагодження

Приклад:

javascript
const os = require('os'); console.log(os.platform()); // 'win32' чи 'linux'

8. Сторонні модулі (npm)

Встановлюються через npm:

javascript
npm install chalk

Використання:

javascript
import chalk from 'chalk'; console.log(chalk.green('Success!'));

Зберігаються в папці node_modules і перелічуються в package.json.

9. Кешування модулів

Node.js завантажує модуль один раз, а потім бере його з кешу:

javascript
require('./math'); require('./math'); // другий виклик не перечитує файл

Це прискорює роботу, але якщо потрібно переініціалізувати модуль, кеш можна очистити:

javascript
delete require.cache[require.resolve('./math')];

10. Шлях і область видимості

Модуль може бути:

  • локальним (./math.js);
  • глобальним (вбудований fs);
  • встановленим через npm (express).

Node.js шукає їх у такому порядку:

  1. Вбудовані (fs, path);
  2. Локальні (./ чи ../);
  3. У node_modules (з поточної папки вгору по дереву).

11. Приклад реальної структури проєкту

javascript
project/ ├── package.json ├── app.js ├── config/ │ └── db.js ├── utils/ │ └── logger.js └── routes/ └── userRoutes.js

У app.js:

javascript
const db = require('./config/db'); const logger = require('./utils/logger'); const routes = require('./routes/userRoutes');

Кожен файл - модуль. Кожен модуль експортує свої функції й не "заважає" іншим.

12. Коротке резюме

ПунктCommonJSES Modules
Імпортrequire()import
Експортmodule.exportsexport
ПідтримкаЗа замовчуваннямЧерез "type": "module" чи .mjs
ЗавантаженняСинхроннеАсинхронне
Tree-shakingНемаєЄ
ЗастосуванняСтарі й серверні проєктиСучасні модулі й фронтенд

Одним реченням

Модуль у Node.js - це незалежний файл із кодом (JS, JSON чи нативним бінарником), який експортує певні дані чи функції і може бути імпортований в інші файли через require() чи import.

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.