Blog

Zwischenspeichern Ihrer Node-Module in Azure DevOps

Riccardo Corradin

Aktualisiert Oktober 21, 2025
3 Minuten

Wie können Sie dafür sorgen, dass Ihre Builds schneller fertig werden, so dass Sie öfter bauen können und früher Feedback erhalten? Sie können dies tun, indem Sie Ihre Knotenmodule in Azure DevOps zwischenspeichern. Wie das geht, erkläre ich Ihnen in diesem Blogbeitrag.

Die Erstellung einer Build-Pipeline in Azure DevOps für eine Node.js-basierte Anwendung ist ganz einfach. Sie brauchen dafür nur ein paar Zeilen Code. Wahrscheinlich werden Sie weitere Aufgaben hinzufügen, z. B. Linting, das Ausführen von Tests und vielleicht noch mehr. Daher wird die Pipeline mit jeder hinzugefügten Aufgabe länger brauchen, um abgeschlossen zu werden. Lassen Sie uns damit beginnen, die Dinge mit Hilfe von Caching zu beschleunigen.

Das Repository für das Caching von Knotenmodulen in Azure DevOps finden Sie hier.

Angenommen, die YAML-Datei der Pipeline sieht wie folgt aus:

https://gist.github.com/corradin/10b55229454a7fb1c220a683ac4a526f

Der erste Schritt besteht darin, alle Abhängigkeiten zu installieren. Der zweite Schritt benötigt diese Abhängigkeiten, um den Build zu starten. In diesem Beispiel habe ich eine React-Anwendung verwendet. Jede Anwendung, die NPM-Pakete benötigt, wird jedoch von der Caching-Lösung profitieren.

Die Ergebnisse sind wie folgt:

Azure DevOps Pipeline-Laufergebnisse ohne Knoten-Caching

Eine Bauzeit von unter einer Minute ist nicht schlecht, aber wir können noch besser werden.

Caching hinzufügen

Die azure-pipelines.yml im Repository wird wie folgt geändert:

https://gist.github.com/corradin/1b2db5c54f85c818f093ddd028351bd7

Die Cache-Aufgabe nimmt verschiedene Eingaben entgegen. Es gibt eine Schlüsseleingabe, die ein normaler String-Wert oder in diesem Fall ein Dateipfad sein kann. Der Inhalt von package-lock.json wird gehasht und erzeugt einen dynamischen Cache-Schlüssel. Das heißt, wenn sich der Inhalt der Datei package-lock.json ändert, wird ein neuer Schlüssel erzeugt.

Die zweite Eingabe ist der Pfad des Ordners, der zwischengespeichert werden muss. NPM verwendet ~/.npm auf POSIX und %LocalAppData%npm-cache auf Windows-Rechnern. Auf dem Ubuntu-Image habe ich keine Möglichkeit gefunden, auf ~/.npm zuzugreifen, also habe ich stattdessen den Ordner .npm im Arbeitsbereich als Cache-Speicherort festgelegt. Dazu fügen Sie dem Befehl npm ci das Argument cache hinzu. Außerdem ist es empfehlenswert, den Cache-Ordner festzulegen, da er weiterläuft, wenn Sie z.B. zu einem Windows-Agenten wechseln.

Nachdem Sie die YAML-Datei übertragen und auf die Fertigstellung des Builds gewartet haben, sehen wir uns die Ergebnisse an:

Ergebnisse des ersten Laufs der Azure DevOps-Pipeline mit Node Caching

Dieser Lauf dauert länger, weil der Cache gespeichert werden muss. D.h.: Der Cache-Schlüssel wurde nicht gefunden, also gibt es einen Cache-Miss.

Lassen Sie die Pipeline erneut laufen und überprüfen Sie die Ergebnisse:

Azure DevOps-Pipeline nachträglich mit Node Caching ausführen

Es dauert immer noch etwas länger, aber jetzt wird der Cache heruntergeladen und der Befehl npm ci holt sich die benötigten Node-Module aus dem .npm-Ordner. Die Aufgabe "NPM install dependencies" ging von 28 auf 10 Sekunden zurück.

Abhängig von der Anzahl der Aufgaben in Ihrer Build-Pipeline kann Ihre Laufleistung variieren. Bei meinem Kunden konnte ich die Build-Zeit von 5.29 Minuten auf 3.22 Minuten verbessern.

Fazit

Das Zwischenspeichern von Knotenmodulen in Azure DevOps verkürzt die Laufzeit Ihrer Pipeline, wenn Ihre Lösung auf Knotenpakete angewiesen ist. Meiner Meinung nach sollten Sie bei der Erstellung einer Pipeline mit dem Caching von Node-Modulen beginnen. Ich glaube, dass die Leistungsvorteile den Zeitaufwand für die Implementierung überwiegen.

Verfasst von

Riccardo Corradin

Contact

Let’s discuss how we can support your journey.