Skip to main content

Що робить require()?

1. Що робить require()

require() - це вбудована функція Node.js, яка завантажує й виконує модуль, а потім повертає те, що модуль експортує через module.exports.

Простіше кажучи:

javascript
const math = require('./math');

означає:

"Завантаж файл math.js, виконай його код і поверни об'єкт, який він експортує."

2. Приклад використання

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

Коли викликається require('./math'):

  1. Node.js знаходить файл math.js;
  2. Виконує його код;
  3. Бере module.exports;
  4. Повертає цей об'єкт у змінну math.

3. Що можна "require"

Тип модуляПрикладОпис
Локальнийrequire('./utils')Файл у твоєму проєкті (.js, .json, .node)
Вбудований (core)require('fs'), require('path')Модулі, вбудовані в Node.js
Сторонній (npm)require('express')Модулі з node_modules
JSONrequire('./data.json')Node.js автоматично парсить JSON
Скомпільований C++require('./addon.node')Нативні модулі

4. Що відбувається під капотом

Коли ти викликаєш:

javascript
const math = require('./math');

Node.js проходить 5 кроків:

1. Розв'язання шляху

Node.js шукає файл:

javascript
./math.js./math.json./math.node

Якщо шлях без ./ - шукає в:

javascript
node_modules

2. Кешування

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

javascript
const x = require('./module'); const y = require('./module'); console.log(x === y); // true

Кеш зберігається в require.cache.

3. Завантаження

Node.js читає вміст файлу (якщо не знайдений у кеші).

4. Обгортання

Node.js обгортає код модуля у внутрішню функцію:

javascript
(function (exports, require, module, __filename, __dirname) { // вміст твого файлу });

Це створює ізольовану область видимості й дає доступ до:

  • require
  • module
  • exports
  • __filename
  • __dirname

5. Виконання

Код модуля виконується, і все, що присвоєно module.exports, стає результатом require().

5. Експорт та імпорт разом

Експорт:

javascript
// user.js module.exports = { name: 'Tim', sayHi() { console.log('Hi!'); } };

Імпорт:

javascript
// app.js const user = require('./user'); console.log(user.name); // 'Tim' user.sayHi(); // 'Hi!'

6. Підтримка JSON та інших типів

Node.js вміє автоматично парсити JSON:

javascript
// config.json { "port": 3000, "mode": "production" } // app.js const config = require('./config.json'); console.log(config.port); // 3000

Для бінарних нативних модулів (.node) Node завантажує скомпільований C++-код.

7. Механізм кешування

Кожен модуль виконується лише один раз. Результат зберігається в require.cache.

javascript
console.log(require.cache);

Це прискорює роботу, але можна скинути:

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

8. Порядок пошуку модулів

Коли ти викликаєш require('ім'я'), Node.js шукає модуль у такому порядку:

  1. Вбудовані (fs, path, os, http...);
  2. Локальні (./math, ../utils);
  3. node_modules у поточній директорії;
  4. Потім вище по дереву директорій, поки не дійде до кореня.

9. Відмінність від ES Modules

КритерійCommonJS (require)ES Modules (import)
Імпортrequire()import
Експортmodule.exportsexport
ЗавантаженняСинхроннеАсинхронне
КешуванняЄЄ
ПідтримкаЗа замовчуванням у Node.jsЧерез "type": "module" чи .mjs
Підходить дляNode.js-серверівСучасного фронтенду й Node.js 13+

10. Приклад повного циклу

Файли:

javascript
project/ ├── app.js └── math.js

math.js

javascript
console.log('Модуль math завантажується...'); module.exports = { add(a, b) { return a + b; }, };

app.js

javascript
const math = require('./math'); console.log(math.add(2, 3));

Запуск:

javascript
Модуль math завантажується... 5

Якщо викликати require('./math') ще раз:

javascript
5

(рядок "Модуль math завантажується..." більше не з'явиться - модуль закешовано)

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

Що робить require()Пояснення
Шукає файлРозв'язує шлях (.js, .json, .node)
КешуєОдин раз виконує модуль і зберігає результат
ІзолюєОбгортає модуль у внутрішню функцію
ВиконуєЗапускає код модуля
ПовертаєПовертає об'єкт module.exports

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

require() - це вбудована функція Node.js, яка завантажує, виконує й повертає експорт модуля (module.exports), забезпечуючи модульність та ізоляцію коду в системі CommonJS.

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

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

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