Wie exportiere ich ein Yarn-Projekt für die Produktion ohne Entwicklungsabhängigkeiten?
- Einleitung
- Worin liegt der Unterschied zwischen regulären Abhängigkeiten und Entwicklungsabhängigkeiten?
- Installation ohne Entwicklungsabhängigkeiten
- Bereitstellung eines Produktions-Builds
- Typische Vorgehensweise für ein Produktions-Deployment
- Beispiel: Schritt für Schritt
- Wichtige Hinweise
Einleitung
Beim Erstellen eines Node.js-Projekts mit Yarn ist es wichtig, im Produktionsumfeld nur die notwendigen Bibliotheken zu installieren, um die Anwendung schlank und performant zu halten. Entwicklungsabhängigkeiten (Development Dependencies) sind Pakete, die nur während der Entwicklung benötigt werden, etwa Testframeworks, Compiler oder Linter, jedoch nicht im produktiven Betrieb. Daher sollte man sicherstellen, dass diese nicht in der Produktionsumgebung vorhanden sind.
Worin liegt der Unterschied zwischen regulären Abhängigkeiten und Entwicklungsabhängigkeiten?
Im package.json eines Node-Projekts gibt es zwei wichtige Felder, die Abhängigkeiten festlegen: "dependencies" und "devDependencies". Die regulären Abhängigkeiten sind Pakete, die für den Betrieb der Anwendung erforderlich sind. Die Entwicklungsabhängigkeiten sind jene, die zum Beispiel für Tests, Codeüberprüfung oder Build-Schritte benötigt werden, aber nicht im Produktivbetrieb.
Installation ohne Entwicklungsabhängigkeiten
Wenn die Anwendung auf einem Server oder in einer produktiven Umgebung installiert wird, kann man mit dem Befehl yarn install --production nur die regulären Abhängigkeiten installieren lassen. Das bedeutet, dass Yarn die Pakete aus dependencies lädt und installiert, jedoch nicht jene aus devDependencies. Dies reduziert die Größe des Node-Moduls-Ordners und verhindert, dass unnötiger Code auf dem Produktionssystem liegt.
Bereitstellung eines Produktions-Builds
In vielen Projekten wird vor dem Deployment ein sogenannter Production-Build erzeugt, der den Quellcode bündelt, optimiert und in ein Verzeichnis wie dist oder build ausgibt. Üblicherweise läuft dafür ein Befehl wie yarn build, der per Skript definiert ist und Werkzeuge wie Webpack, Babel oder ähnliche verwendet. Dieser Build-Schritt sollte lokal oder auf einem CI-Server erfolgen, also nicht auf dem Zielserver.
Nach dem Erzeugen des Production-Builds kann das entsprechende Verzeichnis zusammen mit der package.json und yarn.lock in die Produktionsumgebung übertragen werden.
Typische Vorgehensweise für ein Produktions-Deployment
Zunächst stellt man sicher, dass man alle notwendigen Dateien auf dem Zielsystem hat, darunter das Build-Ergebnis und die Konfigurationsdateien. Dann führt man yarn install --production aus, um nur die dependencies zu installieren. Anschließend kann man die Anwendung starten, typischerweise mit einem Skript wie yarn start oder dem direkt aufrufbaren Einstiegspunkt.
Beispiel: Schritt für Schritt
Angenommen, das Projekt enthält folgende Skripte im package.json:
{ "scripts": { "build": "webpack --mode production", "start": "node dist/index.js" }}Man führt lokal oder im CI folgendes aus:
yarn installyarn buildDann werden nur das Ergebnisverzeichnis und die package-Dateien in den Server kopiert. Dort dann:
yarn install --productionyarn startWichtige Hinweise
Die Option --production ist essenziell, damit devDependencies nicht installiert werden. Falls man Node 16+ und npm verwendet, gibt es vergleichbare Optionen. Beachte, dass sich NODE_ENV=production zwar auch auf das Verhalten einiger Pakete auswirken kann, aber nicht automatisch das Installationsverhalten von Yarn steuert. Deshalb ist der explizite Schalter --production notwendig.
Zusammenfassend besteht der Schlüssel darin, das Projekt zunächst mit allen Abhängigkeiten lokal oder im CI zu bauen und auf dem Zielsystem nur die notwendigen Produktionsabhängigkeiten zu installieren.
