Moduły w JavaScript
Ten artykuł wyjaśnia moduły w JavaScript.
YouTube Video
Moduły w JavaScript
Moduły w JavaScript to sposób na organizację kodu i podzielenie go na wielokrotne używalne komponenty. Dzięki stosowaniu modułów poprawia się czytelność i utrzymanie kodu, a te same funkcjonalności mogą być wykorzystywane w innych projektach. Tutaj wyjaśniamy różne systemy modułów, od koncepcji modułów po konkretne przykłady użycia.
Koncepcja modułów w JavaScript
JavaScript pierwotnie nie miał systemu modułów. Jednak w miarę jak aplikacje stawały się większe, modularizacja stała się ważna, aby dzielić kod na mniejsze jednostki do ponownego użycia. Moduł to fragment kodu z określoną funkcją, który może być zarządzany niezależnie od reszty kodu, co pozwala na podzielenie go na wiele plików.
Główne rodzaje modułów
W JavaScript istnieje kilka systemów modułów. Najczęściej używane to ES Modules (ESM) i CommonJS.
-
ES Modules to system modułów wprowadzony w ECMAScript 2015 (ES6), który definiuje moduły za pomocą słów kluczowych
import
orazexport
. System ten jest szeroko stosowany zarówno po stronie klienta (przeglądarki), jak i po stronie serwera (Node.js). -
CommonJS to system modułów używany głównie w Node.js. Moduły są definiowane za pomocą
require
imodule.exports
do importowania i eksportowania plików.
Szczegóły dotyczące ES Modules (ESM)
ES Modules to standardowy system modułów w JavaScript, który umożliwia łatwą wymianę funkcjonalności między modułami. W przeglądarkach i Node.js ten system jest używany do definiowania i importowania modułów.
export
i import
export
to słowo kluczowe umożliwiające udostępnianie funkcji modułu na zewnątrz. import
służy do zastosowania funkcji zdefiniowanych w innych modułach.
Przykład: Eksport modułu
Moduły w ES Modules
można eksportować w następujący sposób.
1// math.mjs
2export function add(a, b) {
3 return a + b;
4}
5export function subtract(a, b) {
6 return a - b;
7}
W tym module math.mjs
funkcje add
oraz subtract
są eksportowane. Te funkcje mogą być importowane z innych modułów.
Tutaj .mjs
to rozszerzenie pliku, które jednoznacznie wskazuje na plik JavaScript w formacie ES Modules. W Node.js rozszerzenie pliku decyduje o tym, czy jest to CommonJS
, czy ES Modules
. Jednak jeśli w pliku package.json
określono type: "module"
, pliki z rozszerzeniem .js
są domyślnie traktowane jako ES Modules
.
Przykład: Import Modułu
Moduły można importować w ES Modules
w następujący sposób.
1// main.mjs
2import { add, subtract } from './math.mjs';
3
4console.log(add(3, 5)); // 8
5console.log(subtract(10, 7)); // 3
W ten sposób, używając import
, możesz łatwo korzystać z funkcji zdefiniowanych w innych plikach.
Eksport Domyślny i Eksport Nazwany
Istnieją dwie metody eksportu modułów. Jedną z nich jest eksport nazwany, a drugą eksport domyślny.
- Eksport nazwany jest używany, gdy eksportujesz wiele funkcji lub zmiennych z modułu. Możesz wykonać wiele eksportów, a przy imporcie odbierać je używając określonych nazw.
1// utils.mjs
2export function sum(a, b) {
3 return a + b;
4}
5export function multiply(a, b) {
6 return a * b;
7}
1// main.mjs
2import { sum, multiply } from './utils.mjs';
3
4console.log(sum(4, 6)); // 10
5console.log(multiply(3, 5)); // 15
- Eksport domyślny jest stosowany, gdy z modułu eksportowana jest jedna funkcja lub klasa. Podczas importu może być odbierany pod dowolną nazwą.
1// greet.mjs
2export default function greet() {
3 return "Hello, World!";
4}
1// main.mjs
2import greet from './greet.mjs';
3
4console.log(greet()); // "Hello, World!"
Możliwy jest tylko jeden eksport domyślny, ale eksport nazwany może eksportować wiele elementów jednocześnie.
Przykład użycia po stronie klienta (przeglądarka).
Przykład: Eksport modułu
Moduły w ES Modules
można eksportować w następujący sposób.
1// utils.js
2export function sum(a, b) {
3 return a + b;
4}
5export function multiply(a, b) {
6 return a * b;
7}
W tym module utils.js
funkcje sum
oraz multiply
są eksportowane.
Przykład: Import Modułu
Moduły po stronie klienta można importować w następujący sposób.
1<!DOCTYPE html>
2<html lang="ja">
3<head>
4 <meta charset="UTF-8">
5 <title>ES Modules Sample in HTML</title>
6</head>
7<body>
8 <h1>ES Modules Sample</h1>
9 <div id="result"></div>
10
11 <script type="module">
12 import { sum, multiply } from './utils.js';
13
14 const result = `
15 <p>sum(3, 5) = ${sum(3, 5)}</p>
16 <p>multiply(10, 7) = ${multiply(10, 7)}</p>
17 `;
18
19 document.getElementById('result').innerHTML = result;
20 console.log(sum(3, 5)); // 8
21 console.log(multiply(10, 7)); // 70
22 </script>
23</body>
24</html>
- Ustawiając atrybut
type
tagu<script>
namodule
, w HTML można używać składni ES modules, takiej jakimport
orazexport
. - Instrukcja
import
ładuje zewnętrzny plikutils.js
i wyświetla wynik.
Szczegóły CommonJS
CommonJS to system modułów głównie używany w Node.js. Moduły są eksportowane i importowane za pomocą module.exports
i require
.
require
i module.exports
W CommonJS module.exports
jest używany do eksportowania modułów. Również require
jest używany do korzystania z modułów z innych plików.
Przykład: Eksport modułu
Moduły można eksportować w CommonJS
w następujący sposób.
1// math.js
2module.exports = {
3 add: function(a, b) {
4 return a + b;
5 },
6 subtract: function(a, b) {
7 return a - b;
8 }
9};
Przykład: Import Modułu
Moduły można importować w CommonJS
w następujący sposób.
1// main.js
2const math = require('./math.js');
3
4console.log(math.add(4, 7)); // 11
5console.log(math.subtract(9, 2)); // 7
W Node.js CommonJS jest używany jako domyślny system modułów, ale obsługiwane są także moduły ES.
Import Dynamiczny
W JavaScript moduły mogą być dynamicznie importowane za pomocą import()
. Ta metoda wykorzystuje przetwarzanie asynchroniczne do ładowania modułów w razie potrzeby.
Dynamiczne importowanie można wykonać w następujący sposób.
1async function loadModule() {
2 const math = await import('./math.js');
3 console.log(math.add(5, 3)); // 8
4}
5
6loadModule();
Import dynamiczny jest jednym ze sposobów na poprawę wydajności aplikacji. Ponieważ możesz ładować moduły w razie potrzeby zamiast wszystkich podczas początkowego ładowania, poprawia to szybkość wyświetlania strony.
Zalety modułów
-
Ponowne użycie kodu
- Zmodularyzowany kod może być używany ponownie w innych projektach. Tworząc moduły z wspólną funkcjonalnością i używając ich w wielu aplikacjach, efektywność rozwoju znacznie się poprawia.
-
Lepsza łatwość utrzymania
- Dzieląc kod na moduły, łatwiej jest modyfikować konkretne funkcje lub części. Zarządzanie kodem w małych jednostkach ułatwia znajdowanie i naprawianie błędów.
-
Unikanie kolizji nazw przestrzeni
- Definiowanie wielu zmiennych i funkcji w globalnym zakresie może prowadzić do kolizji nazw, ale modularyzacja temu zapobiega i pomaga utrzymać czystszy kod.
-
Zarządzanie zależnościami
- Korzystanie z modułów umożliwia wyraźne zarządzanie zależnościami aplikacji. Staje się jasne, który moduł zależy od innych modułów, co ułatwia zrozumienie struktury kodu.
Podsumowanie
System modułów w JavaScripcie to potężne narzędzie do organizowania kodu i dzielenia go na komponenty wielokrotnego użytku. Zrozumienie różnic między modułami ES a CommonJS oraz wybór odpowiedniego systemu modułów w zależności od projektu pozwala zwiększyć czytelność i konserwowalność kodu. Co więcej, wykorzystując dynamiczne importy, można zoptymalizować wydajność aplikacji.
Wykorzystajmy system modułów, aby tworzyć bardziej skalowalne i wydajne aplikacje w JavaScript.
Możesz śledzić ten artykuł, korzystając z Visual Studio Code na naszym kanale YouTube. Proszę również sprawdzić nasz kanał YouTube.