Das Dependency Management-System von Gradle speichert heruntergeladene Artefakte in einem lokalen Maven-Cache. Wenn ein Build erneut dieselbe Abhängigkeit anfordert, wird die Abhängigkeit einfach aus dem Cache abgerufen, wodurch jegliche Netzwerkübertragung des Artefakts vermieden wird.NPM-Caching ähnlich einem lokalen Maven-Cache
Ich versuche, dieses Verhalten mit NPM zum Erstellen von JavaScript-Projekten zu replizieren. Ich habe erwartet, dass NPM einen globalen node_modules-Cache unterstützt, aber die Installation eines Pakets "global" in NPM hat eine andere Bedeutung => das Paket wird zu PATH hinzugefügt, so dass es als CLI-Tool verwendet werden kann.
die Dokumenation für npm install Lesen, ist das Standardverhalten von Paketen in einem lokalen node_modules Verzeichnis zu installieren. Dies würde jedoch bedeuten, dass viele doppelte Pakete auf dem System wertvollen Speicherplatz verschwenden würden. Es stellt auch ein Problem dar, saubere Produktionsaufbauten zu machen, da idealerweise die Knotenmodule jedes Mal weggeblasen werden sollten.
Unterstützt NPM so etwas wie das Maven-Caching der Gradle? Die Dokumentation auf NPM cache macht es nicht klarer, wie dies zu verwenden ist. Darüber hinaus ist es nicht offensichtlich, ob eine Caching-Strategie mit NPM über mehrere parallele Builds sicher ist.
Dies scheint eine Grundvoraussetzung für vielbeschäftigte CI-Umgebungen zu sein, die zuvor gelöst sein muss. Ich fand das npm-cache Tool, das diese Unterstützung zu bieten scheint, aber es wäre viel besser, wenn Caching nativ in npm
selbst unterstützt wurde.
Danke!
Es ist genau das Verhalten des Caches, die ich zu verstehen versuchen. Bei einer Neuinstallation auf meinem Computer wird beispielsweise ein Verzeichnis "node_modules" mit einer Größe von ~ 3 GB erstellt, das Cache-Verzeichnis ".npm" jedoch nur ~ 120 MB. Also, was ist hier los? Ist NPM nicht alles im Cache? Ich kann dieses Verhalten nirgendwo dokumentiert oder erklärt finden – Boon
Obwohl NPM versucht, die Abhängigkeiten zu deduplizieren, garantiert es keine vollständige Deduplizierung. Durch seine rekursive Art können Sie also in Ihrer Abhängigkeitsbaumstruktur weitere Kopien desselben Pakets erhalten. Und deshalb enden Sie mit einem größeren 'node_modules'-Ordner als Ihr Cache. – fmello
Nachdem ich das gesagt habe, stimme ich zu, dass ein 120MB bis 3GB Sprung groß erscheint. Können Sie bestätigen, ob Ihre npm-Version 3+ ist? Ich bin von meinem Dev env übers Wochenende weg. Aber wenn Sie ein Beispiel Ihrer 'package.json' veröffentlichen, würde ich froh sein, eine Beispielinstallation für Sie zu führen und Ergebnisse zu vergleichen – fmello