Перейти до основного вмісту
Модуль 8 · Урок 1 із 429/32 у курсі~12 min
Модульні уроки (1/4)

Модулі ESM: імпорт / експорт

Коли програма росте, зберігати все в одному файлі стає незручно. Сучасний JavaScript вирішує проблему з ES-модулями (ESM): кожен файл є модулем, який можна експортувати функції, константи, класи та інші файли можуть імпортувати їх.

export

Ви експортуєте те, що хочете оприлюднити. Дві форми:

JS
// somma.js
export function somma(a, b) {
  return a + b;
}

export const PI = 3.14159;

Або в кінці файлу:

JS
function somma(a, b) {
  return a + b;
}
const PI = 3.14159;
export { somma, PI };

import

З іншого файлу:

JS
// app.js
import { somma, PI } from './somma.js';

console.log(somma(1, 2)); // 3
console.log(PI); // 3.14159

Об’єкт { somma, PI } — це список імен, який ви хочете імпортувати. Вони повинні відповідати експортовані імена.

Експорт за замовчуванням

Кожен модуль може мати один «основний» експорт без імені:

JS
// log.js
export default function log(msg) {
  console.log('[app]', msg);
}

Ви імпортуєте його, вибравши назву локально:

JS
import log from './log.js';
log('ciao');

Перейменування

JS
import { somma as plus } from './somma.js';
export { somma as add } from './somma.js'; // re-export

Один "простір імен" на файл

Модулі є ізольованими: змінна, оголошена у файлі, не потрапляє в глобальну область видимості. Ви потрібно експортувати його явно, щоб зробити його видимим деінде. Це величезне покращення старої школи JS, де кожен <script> ділився window.

Спробуйте

У наведених нижче вправах ви не будете писати справжній синтаксис import/export — пісочниця є єдиною файл. Натомість ми попросимо вас організувати код у невеликі окремі функції, які співпрацювати, як якщо б кожен був у окремому файлі.

вправи#js.m8.l1.e1
Спроби: 0Завантаження…

Визначте дві окремі функції: `square(n)` (повертає n*n) і `sumOfSquares(a, b)`, яка використовує квадрат. Подумайте про квадрат як про «експортований» із файлу та повторно використаний sumOfSquares.

Завантаження редактора…
Показати підказку

sumOfSquares(a,b) = квадрат(a) + квадрат(b)

Рішення доступне після 3 спроб

Повторна вправа

вправи#js.m8.l1.e2
Спроби: 0Завантаження…

Визначте `isEven(n)` (істина, якщо n парне) і `countEven(arr)`, який використовує isEven для підрахунку парних елементів у масиві. Зберігайте їх як дві окремі функції.

Завантаження редактора…
Показати підказку

arr.filter(isEven).length

Рішення доступне після 3 спроб