Blanding 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
app.mjs
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.
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat