Moduły

Obecnie JavaScript to już nie tylko pojedyńcze skrypty. Dzisiaj tworzymy rozbudowane aplikacje, które siłą rzeczy dzielimy na moduły aby pogrupować nasz kod logicznie oraz funkcyjnie.

Istnieje już kilka systemów i narzędzi do obsługi modułów w JavaScript, np. AMD, SystemJS czy też RequireJS.

Po co więc system modułów w ES6? Głównie po to aby ustandaryzować sposób definiowania i wykorzystywania modułów oraz dadać kilka funkcjonalności znanych z innym języków.

Definiowanie modułów

Moduł to po prostu plik .js eksportujący część swoich elementów - funkcji, zmiennych i stałych.

//our-module.js
export const A = 10;

export let B = 20;

export function greet (name, age) {
    return `Hello! My name is ${name} and I am ${age} years old.`;
}

Uwaga: Słowo kluczowe export musi znajdować się na najwyższym poziomie kodu, nie może być zagnieżdżone w bloku lub funkcji.

Korzystanie z modułów

Aby wykorzystać elementy modułu musimy je zaimportować.

import { A, B, greet } from 'our-module.js';

greet('John Doe', A + B);
// -> 'Hello! My name is John Doe and I am 30 years old.'

Uwaga: Słowo kluczowe import, podobnie jak export, musi znajdować się na najwyższym poziomie kodu, nie może być zagnieżdżone w bloku lub funkcji.

Możemy także w łatwy sposób zaimportować wszystkie elementy modułu.

import * from 'our-module.js';

Zmiana nazwy

Możemy też zmienić nazwę elementu podczas eksportu.

//our-module.js
const A = 10;

export { A as B };

A także podczas importu.

import { B as C } from 'our-module.js';

Importowanie wszystkich elementów modułu powoduje przypisanie jego całej przestrzeni nazw do obecnego zakresu. Może być to kłopotliwe, na przykład z powodu kolizji nazw. Możemy wykorzystać as aby zamknąć przestrzeń nazw modułu w obiekcie.

import * as ourModule from 'our-module.js';

console.log(ourModule.B); // -> 10

Moduły agregujące

Często przydają się również moduły, których zadaniem jest ponowy eksport elementów wielu modułów.

//our-module.js
export * from 'module-1.js';
export * from 'module-2.js';

Przykład 11.1 z wykorzystaniem BabelJS

Problemy z modułami

Obecnie moduły nie są jeszcze wspierane we wszystkich przeglądarkach. Nie jest to jednak największy problem korzystania z modułów.

Każdy import powoduje wykonanie zapytania o plik zawierający moduł. Kiedy mamy wiele modułów, które mają wiele zależności ilość zapytań może radykalnie wydłużyć czas ładowania się aplikacji.

Czy zatem powinniśmy dzielić nasze aplikacji na moduły? Jak najbardziej, dzięki wykorzystaniu narzędzi takich jak Webpack możemy spakować naszą podzieloną na moduły aplikację i załadować ją jednym zapytaniem. Jest to możliwe ponieważ system modułów ES6 jest statyczny - wymaga umieszczenia importów oraz eksportów na najwyższym poziomie kodu. Wszystkie zależności mogą zostać rozwiązane na etapie "kompilacji" i być spakowane do jednego pliku.


Źródła

results matching ""

    No results matching ""