Що робить require()?
1. Що робить require()
require()- це вбудована функція Node.js, яка завантажує й виконує модуль, а потім повертає те, що модуль експортує черезmodule.exports.
Простіше кажучи:
const math = require('./math');означає:
"Завантаж файл
math.js, виконай його код і поверни об'єкт, який він експортує."
2. Приклад використання
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Коли викликається require('./math'):
- Node.js знаходить файл
math.js; - Виконує його код;
- Бере
module.exports; - Повертає цей об'єкт у змінну
math.
3. Що можна "require"
| Тип модуля | Приклад | Опис |
|---|---|---|
| Локальний | require('./utils') | Файл у твоєму проєкті (.js, .json, .node) |
| Вбудований (core) | require('fs'), require('path') | Модулі, вбудовані в Node.js |
| Сторонній (npm) | require('express') | Модулі з node_modules |
| JSON | require('./data.json') | Node.js автоматично парсить JSON |
| Скомпільований C++ | require('./addon.node') | Нативні модулі |
4. Що відбувається під капотом
Коли ти викликаєш:
const math = require('./math');Node.js проходить 5 кроків:
1. Розв'язання шляху
Node.js шукає файл:
./math.js → ./math.json → ./math.nodeЯкщо шлях без ./ - шукає в:
node_modules2. Кешування
Якщо модуль уже завантажений, Node.js повертає його з кешу (щоб не завантажувати заново):
const x = require('./module');
const y = require('./module');
console.log(x === y); // trueКеш зберігається в require.cache.
3. Завантаження
Node.js читає вміст файлу (якщо не знайдений у кеші).
4. Обгортання
Node.js обгортає код модуля у внутрішню функцію:
(function (exports, require, module, __filename, __dirname) {
// вміст твого файлу
});Це створює ізольовану область видимості й дає доступ до:
requiremoduleexports__filename__dirname
5. Виконання
Код модуля виконується, і все, що присвоєно module.exports,
стає результатом require().
5. Експорт та імпорт разом
Експорт:
// user.js
module.exports = {
name: 'Tim',
sayHi() {
console.log('Hi!');
}
};Імпорт:
// app.js
const user = require('./user');
console.log(user.name); // 'Tim'
user.sayHi(); // 'Hi!'6. Підтримка JSON та інших типів
Node.js вміє автоматично парсити JSON:
// config.json
{
"port": 3000,
"mode": "production"
}
// app.js
const config = require('./config.json');
console.log(config.port); // 3000Для бінарних нативних модулів (.node) Node завантажує скомпільований C++-код.
7. Механізм кешування
Кожен модуль виконується лише один раз.
Результат зберігається в require.cache.
console.log(require.cache);Це прискорює роботу, але можна скинути:
delete require.cache[require.resolve('./math')];8. Порядок пошуку модулів
Коли ти викликаєш require('ім'я'), Node.js шукає модуль у такому порядку:
- Вбудовані (
fs,path,os,http...); - Локальні (
./math,../utils); - node_modules у поточній директорії;
- Потім вище по дереву директорій, поки не дійде до кореня.
9. Відмінність від ES Modules
| Критерій | CommonJS (require) | ES Modules (import) |
|---|---|---|
| Імпорт | require() | import |
| Експорт | module.exports | export |
| Завантаження | Синхронне | Асинхронне |
| Кешування | Є | Є |
| Підтримка | За замовчуванням у Node.js | Через "type": "module" чи .mjs |
| Підходить для | Node.js-серверів | Сучасного фронтенду й Node.js 13+ |
10. Приклад повного циклу
Файли:
project/
├── app.js
└── math.jsmath.js
console.log('Модуль math завантажується...');
module.exports = {
add(a, b) { return a + b; },
};app.js
const math = require('./math');
console.log(math.add(2, 3));Запуск:
Модуль math завантажується...
5Якщо викликати require('./math') ще раз:
5(рядок "Модуль math завантажується..." більше не з'явиться - модуль закешовано)
Коротке резюме
Що робить require() | Пояснення |
|---|---|
| Шукає файл | Розв'язує шлях (.js, .json, .node) |
| Кешує | Один раз виконує модуль і зберігає результат |
| Ізолює | Обгортає модуль у внутрішню функцію |
| Виконує | Запускає код модуля |
| Повертає | Повертає об'єкт module.exports |
Одним реченням
require()- це вбудована функція Node.js, яка завантажує, виконує й повертає експорт модуля (module.exports), забезпечуючи модульність та ізоляцію коду в системі CommonJS.
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.