Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Blanding af CommonJS og ES-moduler | Sektion
Node.js Grundlæggende

bookBlanding af CommonJS og ES-moduler

Stryg for at vise menuen

Når du arbejder på Node.js-projekter, kan du støde på både CommonJS og ES Modules i den samme kodebase. Node.js brugte oprindeligt CommonJS (require/module.exports), men understøtter nu også ES Modules (import/export). Det kan være udfordrende at blande disse to systemer på grund af forskelle i syntaks, filendelser og indlæsningsadfærd. Kompatibilitetsproblemer opstår, fordi ikke alle funktioner er tilgængelige, når man importerer én type modul i en anden. Det er vigtigt at forstå strategierne for at bruge begge systemer sammen samt de begrænsninger, du kan støde på.

En almindelig strategi er at vælge et primært modulsystem til dit projekt og kun bruge kompatibilitetsfunktioner, når det er nødvendigt. For eksempel kan du holde det meste af din kode i CommonJS for kompatibilitet med ældre værktøjer, men bruge ES Modules til nyere kode eller når du har brug for funktioner som import.meta.url. Node.js giver dig mulighed for at angive moduletype i din package.json-fil ved hjælp af feltet "type": "commonjs" eller "module". Filer med .cjs behandles altid som CommonJS, mens .mjs-filer altid er ES Modules, uanset feltet "type". Dette giver dig fleksibilitet til at blande modultyper i et projekt, men du skal være opmærksom på begrænsningerne og forskellene i, hvordan moduler indlæses og udføres.

math.cjs

math.cjs

app.mjs

app.mjs

copy

Kodeeksemplet viser, hvordan du kan bruge et CommonJS-modul i et ES Module i Node.js. Filen math.cjs bruger CommonJS-syntaks og eksporterer en add-funktion med module.exports.add = (a, b) => a + b;. Denne funktion lægger to tal sammen og returnerer resultatet.

Filen app.mjs er et ES Module. ES Modules kan ikke bruge require direkte, så du importerer funktionen createRequire fra den indbyggede module-pakke. Ved at kalde createRequire(import.meta.url) opretter du en require-funktion, der fungerer i konteksten af den aktuelle ES Module-fil. Du bruger derefter denne require til at importere CommonJS-modulet (math.cjs).

Når du kalder math.add(2, 3), udskriver koden 5 til konsollen. Denne tilgang gør det muligt at blande CommonJS og ES Modules i det samme projekt og udnytte styrkerne ved hvert system, hvor det er nødvendigt.

question mark

Hvornår bør du vælge CommonJS frem for ES Modules i et Node.js-projekt?

Vælg det korrekte svar

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 1. Kapitel 17

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

Sektion 1. Kapitel 17
some-alt