Können Sie ein privates Repository hosten, das Ihre Organisation mit npm verwenden kann?

219

Npm klingt nach einer großartigen Plattform für die Verwendung innerhalb eines Unternehmens. Neugierig, ob ein privates Repo möglich ist, wie bei Nexus / Maven. Bei Google wird nichts angezeigt :(

Adam
quelle
1
Im Folgenden finden Sie eine sehr übersichtliche Dokumentation, wie das geht: clock.co.uk/tech-blogs/how-to-create-a-private-npmjs-repository Dies ist dasselbe, wie pvorb in seiner Antwort erklärt hat.
ramesh.mimit
2
Beachten Sie, dass der Beitrag clock.co.uk ein vollständiges Duplikat der npm-Registrierung ist. Für einen lokalen Cache Ihrer erforderlichen Abhängigkeiten ist npm_lazy die beste Lösung, die ich gefunden habe . Das Dokument auf meiner Gabel ist möglicherweise etwas einfacher zu befolgen.
Jake Berger
1
Ich weiß, dass ich etwas spät zur Diskussion komme, aber ich möchte nur hinzufügen, dass wir kürzlich Unterstützung für die private npm-Registrierung zu unserem (kostenlosen) Produkt ProGet
Karl Harnagy hinzugefügt haben.
2
Wie unten erwähnt, unterstützt Nexus jetzt gehostete und Proxy-npm-Repos.
Zac Thompson
8
Im Laufe der Jahre sind viele Optionen verfügbar geworden. Jeder, der darauf zurückkommt, sollte alle Antworten lesen und nicht nur die, die ich 2011 akzeptiert habe.
Adam

Antworten:

100

Ich glaube nicht, dass es einen einfachen Weg gibt, dies zu tun.

Ein Blick auf die npm-Dokumentation zeigt uns, dass es möglich ist:

Kann ich meine eigene private Registrierung betreiben?

Ja!

Am einfachsten ist es, die Couch-Datenbank zu replizieren und die APIs mit demselben (oder einem ähnlichen) Designdokument zu implementieren.

Wenn Sie die kontinuierliche Replikation von der offiziellen CouchDB aus einrichten und dann Ihre interne CouchDB als Registrierungskonfiguration festlegen, können Sie alle veröffentlichten Pakete zusätzlich zu Ihren privaten lesen und standardmäßig nur intern veröffentlichen. Wenn Sie dann ein Paket veröffentlichen möchten, das die ganze Welt sehen kann, können Sie einfach die --registryKonfiguration für diesen Befehl überschreiben .

Es gibt auch ein hervorragendes Tutorial zum Erstellen eines privaten npm-Repositorys im Clock-Blog.

BEARBEITEN (26.02.2017):

Nicht wirklich neu, aber es gibt jetzt kostenpflichtige Pläne , private Pakete auf NPM zu hosten.

Im Laufe der Jahre ist NPM durch das riesige Frontend-Ökosystem, das auf NPM aufbaut, auch für viele Nicht-Node.js-Unternehmen zu einem Faktor geworden. Wenn in Ihrem Unternehmen Sonatype Nexus bereits zum internen Hosten von Java-Projekten ausgeführt wird, können Sie es auch zum Hosten interner NPM-Pakete verwenden.

Andere Optionen sind JFrog Artifactory und Inedo ProGet , aber ich habe diese nicht verwendet.

pvorb
quelle
201

https://github.com/isaacs/npmjs.org/ : In der npm-Version v1.0.26 können Sie URLs für private Git-Repositorys als Abhängigkeit in Ihren package.json-Dateien angeben. Ich habe es nicht benutzt, würde mich aber über Feedback freuen. Folgendes müssen Sie tun:

{
    "name": "my-app",
    "dependencies": {
        "private-repo": "git+ssh://[email protected]:my-app.git#v0.0.1",
    }
}

Der folgende Beitrag spricht darüber: Debuggable: Private npm-Module

ebdr
quelle
3
Das ist eine großartige Funktion, aber ich habe pvorb's akzeptiert, weil ich gefragt habe, ob ich ein ganzes NPM-Repo veranstalten möchte, ein la-internes Maven-Repo
Adam,
2
Hinweis: NPM unterstützt derzeit nicht die Angabe eines Versionsbereichs mit diesen Git-URLs (z. B. 1.2.x oder ^ 1.2.3). github.com/npm/npm/issues/3328
Clay
@Clay, du kannst aber ein Tag (v0.0.1) angeben, oder?
Mcha
Ja, Sie können ein genaues Tag erstellen.
Clay
Gibt es eine Möglichkeit, GitHub-Bereitstellungsschlüssel zur Authentifizierung bei privaten Repos zu verwenden?
Sunknudsen
91

Hierfür gibt es ein einfach zu verwendendes npm-Paket. https://www.npmjs.org/package/sinopia

Kurz gesagt, Sinopia ist ein privater / caching npm-Repository-Server, den Sie ohne Konfiguration einrichten können.

Sinopia kann verwendet werden, um:

  • eigene private Pakete veröffentlichen, ohne sie der Öffentlichkeit zugänglich zu machen
  • Cache nur öffentliche Pakete, die verwendet werden (es ist nicht erforderlich, die gesamte öffentliche Registrierung zu replizieren)
  • Überschreiben Sie öffentliche Pakete mit einer geänderten Version, die intern erstellt wurden.
TiQP
quelle
13
Sinopia scheint nicht länger aufrechterhalten zu werden. Das letzte Commit war heute (7. März 2016) vor über 8 Monaten. Es sieht gut aus und funktioniert gut, aber achten Sie auf die Wartbarkeit.
Ray Booysen
45
Schauen Sie sich verdaccio an . Es ist eine aktiv gewartete Gabelung: github.com/verdaccio/verdaccio
Rotareti
1
Unterstützt verdaccio eine "nur private" Konfiguration, bei der keine öffentliche Registrierung abgefragt wird?
MarkusSchaber
1
@MarkusSchaber Sie können den Proxy für andere Registries deaktivieren. Es funktioniert im Offline-Modus, auch wenn der Proxy versucht, auf das Netzwerk zuzugreifen.
Juan Picado
1
Ich denke wirklich, dass Verdaccio heute eine eigene Antwort verdient stackoverflow.com/a/50815174/336753 Ich habe den Kommentar hier zuerst nicht einmal bemerkt.
Kub1x
40

Verdaccio ist das, wonach ich gesucht habe und es verdient seine eigene Antwort;) Es ist eine aktiv gewartete Gabelung von Sinopia (hochgelobte Antwort hier ). Es ist eine npm-Registrierung als npm-Paket und kann gefunden werden

hier: https://github.com/verdaccio/verdaccio ,
hier: https://www.verdaccio.org ,
hier: pnpm i -g verdacciooder
hier:docker run -it --rm --detach --name verdaccio -p 4873:4873 verdaccio/verdaccio

kub1x
quelle
2
Dies! danke -> docker run -it --rm --detach --name verdaccio -p 4873: 4873 verdaccio / verdaccio
mwm
1
@mwm Danke. Docker-Version zur Liste hinzugefügt.
Kub1x
28

Am 14. April (2015) wurden npm private Module eingeführt.

Wenn Sie für private Module bezahlen, können Sie:

  • Hosten Sie so viele private Pakete, wie Sie möchten
  • Gewähren Sie jedem anderen bezahlten Benutzer Lese- oder Lese- / Schreibzugriff für diese Pakete
  • Installieren und verwenden Sie alle Pakete, auf die andere bezahlte Benutzer Ihnen Lesezugriff gewährt haben
  • Arbeiten Sie an Paketen zusammen, auf die andere bezahlte Benutzer Ihnen Schreibzugriff gewährt haben

Natürlich ist es nicht kostenlos - derzeit 7 $ pro Monat pro Benutzer.

Und es ist immer noch ein ziemlich neuer Service. Beispielsweise fehlt die Unterstützung für Organisationskonten (Stand Juni 2015):

Derzeit sind private Pakete nur für einzelne Benutzer verfügbar, die Unterstützung für Organisationskonten erfolgt jedoch in Kürze. Sie können in der Zwischenzeit einen Benutzer für Ihre Organisation erstellen, und wir können ihn auf eine Organisation aktualisieren, wenn der Support verfügbar ist.

Obwohl es nicht perfekt ist, ist es das offizielle npm-Lösung für die Verwaltung privater Pakete, und das macht es selbst erwähnenswert.

AKTUALISIEREN

Npm Private Packages sind jetzt verfügbar, mit Plänen für einzelne Benutzer und Organisationen :

  • Unbegrenzte Anzahl öffentlicher und privater Pakete
  • $ 7 / Monat / Entwickler
  • Enthält einen Bereichsnamen, der auf dem Namen der Organisation basiert
  • Veröffentlichen und steuern Sie den Zugriff auf @ org-name / foo

(Haftungsausschluss: nicht einmal in irgendeiner Weise mit npm, Inc. verbunden )

bardzusny
quelle
20

Repository-Manager mit Unterstützung für private npm-Registries:

Abel Pastur
quelle
4
Nur die kostenpflichtigen Versionen unterstützen npm-Repositorys. die kostenlosen Versionen nicht.
Boon
12
Die kostenlose Version von Sonatype Nexus 3.0 unterstützt tatsächlich npm-Repos (zusammen mit Bower- und Docker-Repos).
n8n8baby
10

Ich denke, dieser Thread braucht ein Update. Wenn Sie sich eines der verfügbaren npm-Register ansehen, sind sie extrem schwer und benötigen Couchdb. Gemfurry und andere brauchen dich, um dich von öffentlichen Repos zu lösen. Einige der Npm wie Shadow-Npm haben keine aktuellen Commits .

Dann fanden wir Reggie . Es hat eine gute Commit-Aktivität, ist extrem einfach zu installieren und zu verwenden und hat eine ziemlich gute Community-Unterstützung . Es ist extrem leicht und Sie müssen sich nicht mit Couchdb usw. befassen.

Pradeep Mahdevu
quelle
9

Vergib mir, wenn ich deine Frage nicht gut verstehe, aber hier ist meine Antwort:

Sie können ein privates npm-Modul erstellen und es mit den normalen Befehlen von npm installieren. Die meisten Benutzer von node.js verwenden git als Repository, aber Sie können jedes Repository verwenden, das für Sie funktioniert.

  1. In Ihrem Projekt möchten Sie das Grundgerüst eines NPM-Pakets. Die meisten Knotenmodule verfügen über Git-Repositorys, in denen Sie sehen können, wie sie sich in NPM integrieren lassen (die Datei package.json ist meines Erachtens Teil davon, und auf der NPM-Website erfahren Sie, wie Sie ein npm-Paket erstellen).
  2. Verwenden Sie etwas Ähnliches wie Make, um Ihr Paket so zu erstellen und zu tarballen, dass es über das Internet oder Ihr Netzwerk verfügbar ist, um es für npm-Installationsdownloads bereitzustellen.
  3. Sobald Ihr Paket fertig ist, verwenden Sie

    npm install * tarball_url *

EhevuTov
quelle
5
Du hast seine Frage nicht bekommen, aber die Antwort ist sehr nützlich für mich! :)
Eduardo Costa
7

Dies ist der einfachste Weg, den ich kenne - hosten Sie ihn in der Cloud mit der privaten npm-Registrierung von Gemfury .

Es ist kostenlos und Sie können sich mit Ihrem Github-Konto anmelden. Dies sollte Ihnen im Vergleich zum Einrichten einer eigenen Datenbank viel Zeit sparen.

Alex Urdea
quelle
es ist nicht frei tho.
I.Tyger
6

Wir verwenden den Sonatype Nexus. Die Version ist Nexus Repository ManagerOSS 3.6.1-02. Und ich bin sicher, dass es das private NPM-Repository unterstützt und das Paket zwischengespeichert hat.

Geben Sie hier die Bildbeschreibung ein

Xin Meng
quelle
5

Ein bisschen zu spät zur Party, aber NodeJS (Stand: ~ 14. November, denke ich) unterstützt NPM-Repositories von Unternehmen - mehr erfahren Sie auf deren offizieller Website .

Auf einen flüchtigen Blick scheint es, dass npmE eine Durchfallspiegelung des NPM-Repositorys ermöglicht - das heißt, es werden Pakete im realen NPM-Repository nachgeschlagen, wenn es keines in Ihrem internen Repository findet. Scheint sehr nützlich!

npm Enterprise ist eine lokale Lösung für die sichere Freigabe und Verteilung von JavaScript-Modulen in Ihrem Unternehmen, von dem Team, das npm verwaltet, und der öffentlichen npm-Registrierung. Es ist für Teams konzipiert, die Folgendes benötigen:

Einfache interne gemeinsame Nutzung privater Module Bessere Kontrolle des Entwicklungs- und Bereitstellungsworkflows Strengere Sicherheit bei der Bereitstellung von Open-Source-Modulen. Einhaltung der gesetzlichen Anforderungen für das lokale Hosten von Code. npmE ist private npm

npmE ist eine npm-Registrierung, die mit demselben Standard-npm-Client arbeitet, den Sie bereits verwenden, aber die Funktionen bietet, die von größeren Organisationen benötigt werden, die jetzt begeistert den Knoten übernehmen. Es wurde von npm, Inc., dem Sponsor des Open-Source-Projekts npm und dem Host der öffentlichen npm-Registrierung, erstellt.

Leider ist es nicht kostenlos. Sie können eine Testversion erhalten, aber es handelt sich um kommerzielle Software. Dies ist nicht so toll für Solo-Entwickler, aber wenn Sie ein Solo-Entwickler sind, haben Sie GitHub :-)

Dan Pantry
quelle
3

In diesem Beitrag wird erläutert, wie Sie eine private Registrierung einrichten

  • Stellen Sie sicher, dass couchdb in Ihrem System installiert ist
  • Verwenden Sie den folgenden Befehl, um npmjs.org zu replizieren

    curl -X POST http://127.0.0.1:5984/_replicate -d '{"source":"http://isaacs.iriscouch.com/registry/", "target":"registry", "continuous":true, "create_target":true}' -H "Content-Type: application/json"

Beachten Sie, dass "continuous":trueder Befehl die _changes-API von CouchDB verwendet und alle neuen Änderungen abruft, wenn diese API benachrichtigt wird.

Wenn Sie diese Replikationen jemals stoppen möchten, können Sie sie einfach hinzufügen "cancel":true. Dann wäre das Skript

    curl -X POST http://127.0.0.1:5984/_replicate -d '{"source":"http://isaacs.iriscouch.com/registry/", "target":"registry", "continuous":true, "create_target":true, "cancel":true}' -H "Content-Type: application/json"

Dann gehen Sie zu npmjs.org readme installieren npm (stellen Sie sicher , nodejsund gitinstalliert ist ). Schlag ist alle Schritte

git clone git://github.com/isaacs/npmjs.org.git
cd npmjs.org
sudo npm install -g couchapp 
npm install couchapp 
npm install semver 
couchapp push registry/app.js http://localhost:5984/registry 
couchapp push www/app.js http://localhost:5984/registry 
Nickleefly
quelle
1
Die URL isaacs.iriscouch.com/registry ist jetzt leider tot. Ich habe versucht, es in skimdb.npmjs.com/registry zu ändern , was zunächst zu funktionieren scheint, aber es repliziert nur den Registrierungsindex und nicht die Tarballs ...
fuzzyTew
Die Couchapp- Readme- Datei besagt, dass Couchapp jetzt etwas veraltet ist, aber es heißt auch, dass die aktuelle Möglichkeit, die gesamte Registrierung zu spiegeln, darin besteht, die npm-fullfat-Registrierung zu verwenden
fuzzyTew
Ich habe dafür die statische Registrierung verwendet , die im Gegensatz zu den couchdb-Lösungen überhaupt keine Konfiguration erfordert.
FuzzyTew