Kombination von CommonJS und ES-Modulen
Swipe um das Menü anzuzeigen
Bei der Arbeit an Node.js-Projekten kann es vorkommen, dass sowohl CommonJS- als auch ES-Module im selben Codebestand verwendet werden. Node.js nutzte ursprünglich CommonJS (require/module.exports), unterstützt aber inzwischen auch ES-Module (import/export). Das Mischen dieser beiden Systeme kann aufgrund von Unterschieden in Syntax, Dateiendungen und Ladeverhalten herausfordernd sein. Kompatibilitätsprobleme entstehen, weil nicht alle Funktionen verfügbar sind, wenn ein Modultyp in einen anderen importiert wird. Es ist wichtig, die Strategien für die gleichzeitige Nutzung beider Systeme sowie die möglichen Einschränkungen zu verstehen.
Eine gängige Strategie besteht darin, ein primäres Modulsystem für das Projekt festzulegen und Kompatibilitätsfunktionen nur bei Bedarf zu verwenden. Beispielsweise kann der Großteil des Codes aus Kompatibilitätsgründen mit älteren Tools in CommonJS gehalten werden, während für neueren Code oder für Funktionen wie import.meta.url ES-Module genutzt werden. Node.js ermöglicht es, den Modultyp in der Datei package.json über das Feld "type" festzulegen: "commonjs" oder "module". Dateien mit der Endung .cjs werden immer als CommonJS behandelt, während .mjs-Dateien stets als ES-Module gelten, unabhängig vom Wert des Feldes "type". Dies bietet Flexibilität beim Mischen von Modultypen innerhalb eines Projekts, jedoch sollten die Einschränkungen und Unterschiede beim Laden und Ausführen von Modulen beachtet werden.
math.cjs
app.mjs
Das Codebeispiel zeigt, wie ein CommonJS-Modul innerhalb eines ES-Moduls in Node.js verwendet werden kann. Die Datei math.cjs nutzt die CommonJS-Syntax und exportiert eine add-Funktion mit module.exports.add = (a, b) => a + b;. Diese Funktion addiert zwei Zahlen und gibt das Ergebnis zurück.
Die Datei app.mjs ist ein ES-Modul. ES-Module können require nicht direkt verwenden, daher wird die Funktion createRequire aus dem eingebauten Paket module importiert. Durch den Aufruf von createRequire(import.meta.url) wird eine require-Funktion erzeugt, die im Kontext der aktuellen ES-Modul-Datei funktioniert. Mit dieser require-Funktion wird dann das CommonJS-Modul (math.cjs) importiert.
Beim Aufruf von math.add(2, 3) gibt der Code 5 in der Konsole aus. Dieser Ansatz ermöglicht es, CommonJS- und ES-Module im selben Projekt zu kombinieren und die jeweiligen Vorteile beider Systeme gezielt zu nutzen.
Danke für Ihr Feedback!
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen