Структура проєкту, експорт-імпорт, index.js як хаб

Створимо проєкт modules з такою структурою

modules
      ├── index.js
      └── greetings
                  ├── english.js
                  ├── japanese.js
                  ├── multilang.js
                  └── index.js

Cинтаксис написання функцій в Node.js такий само як і в JS.

function funcName() { };
const funcName = function () { };
const funcName = () => { };
const funcName = () => console.log("Hello world!");

Експорт-імпорт модулів

Дефолтний експорт

Створений модуль можемо експортувати за дефолтом використовуючи конструкцію module.exports.

modules/greetings/english.js
const eng = () => console.log("Hi, there!");
module.exports = eng;

Після цього можемо заімпортувати наш модуль в головному файлі index.js. При імпорті можна змінити назву модуля і дати нову. використовуємо функцію require.

При цьому при імпорті розширення js вказувати не обов'язково. Після цього можна і викликати до виконання наш заімпортований модуль english().

Трохи більше про запуск модуля. А щоб виконати код в терміналі (якщо перебуваємо в кореневому каталозі проєкту modules) запускаємо його.

Відповідно, якщо вкладеність скрипта більша, наприклад ми перебуваємо у дереві файлів на порядок вище, то звертаємось до файлу через слеш.

У цьому випадку файл index.js сприймається, як такий що має виконатися першим за замовчанням, якщо ми не вкажемо конкретне імʼя скрипта. Тобто достатньо вказати шлях до папки, а Node.js, якщо знайде в папці файл index.js, то виконає саме його.

Якщо Node.js не знайде файл index.js, то повернеться помилка.

Дефолтний експорт у програмуванні на Node.js ймовірніше виняток, ніж правило, тому розглянемо стандартний іменний експорт далі.

Експорт v2 (іменний експорт-імпорт)

Плюс такого підходу, що з одного файлу ми можемо експортувати одразу кілька функцій. Використовуємо синтаксис exports.НАЗВА_ФУНКЦІЇ

І одним рядком можемо заімпортувати наші функції в файл скрипта. Присвоївши їм якусь назву.

Можна при імпорті одразу провести деструктуризацію.

Можна під час імпорту і деструктуризації навіть присвоїти нові імена функціям.

index.js як хаб для експорту модулів

Щоб трохи більше прикладів було так само створимо й експортуємо ще оду функцію (модуль).

А тепер у каталозі modules/greetings створимо свій внутрішній index.js. Його і будемо використовувати як своєрідний хаб для експорту.

Логіка така: Оскільки за замовчанням, якщо не вказувати імʼя файла, то Node.js обирає index.js. Тому логічно у ньому зібрати всі експортовані функції і експортувати як обʼєкт. А при імпорті в проєкті просто вказувати назву папки, і при цьому не вказуючи кожен файл окремо. Таким чином ми оптимізуємо основний код програми. Використаємо для цього module.exports.

Тоді імпорт в головному index.js буде виглядати так:

У цьому прикладі ми одразу деструктуризуємо наші функції, хоча інколи зручно не робити цього. Принцип коду обираєте ви.

Last updated