Warum listet meine private npm-Registry alle öffentlichen npm-Module auf, obwohl ich die Registry-Datenbank nicht repliziert habe?

680
Ryan Jarvis

Ich habe eine private npm-Registry eingerichtet, indem ich diese expliziten Anweisungen zum Erstellen einer privaten Registry befolgt habe . Ich habe den Replikationsschritt jedoch übersprungen, da ich beabsichtige, eine leere Registrierung zu haben, in der nur private Module untergebracht werden.

Es scheint jedoch alles zu funktionieren, wenn ich einen Testbefehl starte:

npm --registry http://localhost:5984/registry/_design/scratch/_rewrite search /^zipper 

Ich bekomme die folgende Ausgabe, die darauf hindeutet, dass npm dieses öffentliche Modul findet, das in meiner privaten Registry nicht vorhanden sein sollte:

npm http GET http://localhost:5984/npm_registry/_design/scratch/_rewrite/-/all/since?stale=update_after&startkey=1382392304289 npm http 200 http://localhost:5984/npm_registry/_design/scratch/_rewrite/-/all/since?stale=update_after&startkey=1382392304289 NAME DESCRIPTION AUTHOR DATE VERSION KEYWORDS zipper Insanely simple zipfile creator for node.js =rubenv 2013-05-06 11:35 0.3.0 zip compress archive libzip zipper-insane Insanely simple zipfile creator for node.js =diorahman 2011-12-17 15:54 0.0.1 zip compress archive libzip 

Wenn ich außerdem versuche, das Modul von meiner privaten Registry aus zu installieren, wird es installiert. Was ist denn hier los? Da ich meine eigene CouchDB betreibe, ohne eine vorhandene zu replizieren, habe ich erwartet, dass keine Module in der Datenbank vorhanden sind.

3

1 Antwort auf die Frage

2
Miroslav Bajtoš

Der npm-Client speichert Paket-Metadaten und -archive in einem lokalen Verzeichnis, normalerweise in ~/.npm. Wenn Sie eine Suche durchführen, werden in der Registrierung nur Aktualisierungen abgefragt und die zwischengespeicherten Daten für die Suche verwendet.

Leider unterstützt die Implementierung von npm cache nicht mehrere Registries, sondern führt immer alle Daten aller Registries zusammen.

Als Problemumgehung können Sie npm anweisen, ein anderes Cache-Verzeichnis zu verwenden, wenn Sie mit Ihrer privaten Registry sprechen:

npm --registry http://localhost:5984/registry/etc. --cache $HOME/.npm-private 
Interessant ist, dass dies funktioniert, "npm cache clean" kann jedoch nichts aus dem Cache-Verzeichnis bereinigen Ryan Jarvis vor 11 Jahren 0