Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Що таке модуль у Node.js?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)У Node.js кожен файл - це окремий модуль зі своєю ізольованою областю видимості; він може експортувати код через `module.exports` (CommonJS) чи `export` (ES Modules) і імпортувати код інших модулів. **Ключове:** модулі бувають вбудовані (`fs`, `http`), користувацькі (твої файли) і сторонні (з npm) - Node.js шукає їх саме в такому порядку.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображення## 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. Коротке резюме | Пункт | CommonJS | ES Modules | |---|---|---| | **Імпорт** | `require()` | `import` | | **Експорт** | `module.exports` | `export` | | **Підтримка** | За замовчуванням | Через `"type": "module"` чи `.mjs` | | **Завантаження** | Синхронне | Асинхронне | | **Tree-shaking** | Немає | Є | | **Застосування** | Старі й серверні проєкти | Сучасні модулі й фронтенд | ## Одним реченням > **Модуль у Node.js** - це незалежний файл із кодом (JS, JSON чи нативним бінарником), який експортує певні дані чи функції і може бути імпортований в інші файли через `require()` чи `import`.Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.