Moduler i JavaScript
Denne artikkelen forklarer moduler i JavaScript.
YouTube Video
Moduler i JavaScript
Moduler i JavaScript er en måte å organisere kode på og dele den opp i gjenbrukbare komponenter. Ved å bruke moduler forbedres kodens lesbarhet og vedlikeholdsevne, og samme funksjonalitet kan gjenbrukes i andre prosjekter. Her forklarer vi ulike modulsystemer, fra modulens konsept til spesifikke bruksområder.
Konseptet med JavaScript-moduler
JavaScript hadde opprinnelig ikke et modulært system. Etter hvert som applikasjoner ble større, ble modularisering viktig for å dele opp koden i mindre enheter for gjenbruk. En modul er en kodeblokk med en spesifikk funksjon som kan håndteres uavhengig av annen kode, og dermed delt opp i flere filer.
Hovedtyper av moduler
Det finnes flere modulsystemer i JavaScript. De vanligste er ES-moduler (ESM) og CommonJS.
-
ES-moduler er et modulsystem introdusert i ECMAScript 2015 (ES6), som definerer moduler ved hjelp av nøkkelordene
import
ogexport
. Dette systemet brukes mye både på klientsiden (nettlesere) og på serversiden (Node.js). -
CommonJS er et modulsystem som primært brukes i Node.js. Moduler defineres ved bruk av
require
ogmodule.exports
for å importere og eksportere filer.
Detaljer om ES-moduler (ESM)
ES-moduler er standardsystemet for moduler i JavaScript, som muliggjør enkel utveksling av funksjonalitet mellom moduler. I nettlesere og Node.js brukes dette systemet til å definere og importere moduler.
export
og import
export
er et nøkkelord som brukes for å eksponere funksjonalitet fra en modul til utsiden. import
brukes til å inkludere funksjonalitet definert i andre moduler.
Eksempel: Modul-eksport
Moduler kan eksporteres i ES-moduler
på følgende måte.
1// math.mjs
2export function add(a, b) {
3 return a + b;
4}
5export function subtract(a, b) {
6 return a - b;
7}
I denne math.mjs
-modulen blir funksjonene add
og subtract
eksportert. Disse funksjonene kan importeres fra andre moduler.
Her er .mjs
et filnavnsuffiks som eksplisitt angir en JavaScript-fil i ES-modulformat. I Node.js avgjør filendelsen om det er CommonJS
eller ES-moduler
. Men hvis type: "module"
er angitt i package.json
, blir filer med endelsen .js
behandlet som ES-moduler
som standard.
Eksempel: Modulimport
Moduler kan importeres i ES-moduler
på følgende måte.
1// main.mjs
2import { add, subtract } from './math.mjs';
3
4console.log(add(3, 5)); // 8
5console.log(subtract(10, 7)); // 3
På denne måten kan du enkelt bruke funksjoner definert i andre filer ved å bruke import
.
Standardeksport og Navngitt eksport
Det finnes to eksportmetoder for moduler. Den ene er navngitt eksport, og den andre er standardeksport.
- Navngitte eksporter brukes når du eksporterer flere funksjoner eller variabler fra en modul. Du kan utføre flere eksporter, og ved import mottar du dem med spesifiserte navn.
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
- Standardeksport brukes når du eksporterer én enkelt funksjon eller klasse fra en modul. Ved import kan den mottas med hvilket som helst navn.
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!"
Kun én standardeksport er mulig, men navngitte eksporter kan eksportere flere elementer samtidig.
Eksempel på bruk på klientsiden (nettleser).
Eksempel: Modul-eksport
Moduler kan eksporteres i ES-moduler
på følgende måte.
1// utils.js
2export function sum(a, b) {
3 return a + b;
4}
5export function multiply(a, b) {
6 return a * b;
7}
I denne utils.js
-modulen blir funksjonene sum
og multiply
eksportert.
Eksempel: Modulimport
Moduler kan importeres på klientsiden på følgende måte.
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>
- Ved å sette
type
-attributtet til<script>
-taggen tilmodule
, kan ES-modulsyntaks somimport
ogexport
brukes i HTML. import
-setningen laster den eksterneutils.js
og viser resultatet.
Detaljer om CommonJS
CommonJS er et modulsystem som hovedsakelig brukes i Node.js. Moduler eksporteres og importeres ved hjelp av module.exports
og require
.
require
og module.exports
I CommonJS brukes module.exports
til å eksportere moduler. Videre brukes require
til å bruke moduler fra andre filer.
Eksempel: Modul-eksport
Moduler kan eksporteres i CommonJS
på følgende måte.
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};
Eksempel: Modulimport
Moduler kan importeres i CommonJS
på følgende måte.
1// main.js
2const math = require('./math.js');
3
4console.log(math.add(4, 7)); // 11
5console.log(math.subtract(9, 2)); // 7
I Node.js brukes CommonJS som standardsystem for moduler, men ES-moduler støttes også.
Dynamisk Import
I JavaScript kan moduler importeres dynamisk ved hjelp av import()
. Denne metoden bruker asynkron behandling for å laste inn moduler etter behov.
Dynamiske importer kan gjøres på følgende måte.
1async function loadModule() {
2 const math = await import('./math.js');
3 console.log(math.add(5, 3)); // 8
4}
5
6loadModule();
Dynamisk import er en måte å forbedre applikasjonsytelsen på. Fordi du kan laste inn moduler ved behov i stedet for å laste inn alt ved første innlasting, forbedres sidevisningshastigheten.
Fordeler med moduler
-
Gjenbruk av kode
- Modularisert kode kan gjenbrukes i andre prosjekter. Ved å lage moduler med felles funksjonalitet og bruke dem på tvers av flere applikasjoner, forbedres utviklingseffektiviteten betydelig.
-
Bedre vedlikeholdbarhet
- Ved å dele opp koden i moduler er det lettere å endre spesifikke funksjoner eller deler. Å administrere kode i mindre enheter gjør det lettere å finne og fikse feil.
-
Unngå navnekollisjoner
- Å definere mange variabler og funksjoner i det globale omfanget kan føre til navnekollisjoner, men modularisering forhindrer dette og bidrar til en renere kodebase.
-
Avhengighetsstyring
- Ved å bruke moduler kan du eksplisitt håndtere avhengighetene til en applikasjon. Det blir tydelig hvilke moduler som er avhengige av andre moduler, noe som gjør kodens struktur enklere å forstå.
Sammendrag
JavaScripts modulsystem er et kraftig verktøy for å organisere kode og dele den opp i gjenbrukbare komponenter. Ved å forstå forskjellene mellom ES-moduler og CommonJS og velge det passende modulsystemet basert på prosjektet, kan du forbedre kodelesbarhet og vedlikeholdbarhet. Videre kan du optimalisere applikasjonens ytelse ved å bruke dynamiske importeringer.
La oss utnytte modulsystemet for å bygge mer skalerbare og effektive JavaScript-applikasjoner.
Du kan følge med på artikkelen ovenfor ved å bruke Visual Studio Code på vår YouTube-kanal. Vennligst sjekk ut YouTube-kanalen.