Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Що робить require()?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)`require()` - вбудована функція Node.js, що завантажує й виконує модуль, а потім повертає те, що модуль експортував через `module.exports`; результат кешується, тож повторний виклик того самого шляху не перечитує файл. **Ключове:** Node.js шукає модуль у порядку - вбудовані → локальні → `node_modules` вгору по дереву директорій.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображення## 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` | | **JSON** | `require('./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.exports` | `export` | | Завантаження | Синхронне | Асинхронне | | Кешування | Є | Є | | Підтримка | За замовчуванням у 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.Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.