Wie installiere ich ein privates NPM-Modul ohne meine eigene Registrierung?

328

Ich habe einen gemeinsam genutzten Code genommen und in ein NPM-Modul eingefügt, das ich nicht in die zentrale Registrierung hochladen möchte. Die Frage ist, wie installiere ich es aus anderen Projekten?

Der naheliegende Weg ist wahrscheinlich, meine eigene NPM-Registrierung einzurichten, aber laut Dokumentation ist dies mit viel Aufwand verbunden.

Kann ich einfach ein NPM-Modul installieren, das sich auf dem lokalen Dateisystem befindet, oder vielleicht sogar von Git?

npm install --from-git git@server:project
Futlib
quelle

Antworten:

261
cd somedir
npm install .

oder

npm install path/to/somedir

somedirmuss das package.jsonInnere enthalten .

Es weiß auch über Git Bescheid:

npm install git://github.com/visionmedia/express.git
mihai
quelle
4
Die Lösung path / to / somedir funktioniert, aber dann ist es schrecklich, weil alle erforderlichen Anweisungen dann diesen relativen oder absoluten Pfad enthalten müssen. Bitte korrigieren Sie mich, wenn ich etwas falsch mache ...
Luke Bayes
3
@ Luke ja, du liegst falsch. Nachdem npm installalle Dateien in Ihr Projektverzeichnis kopiert wurden. Die Pfade in den requireAnweisungen beziehen sich also nur auf Ihr Projektverzeichnis.
Mihai
4
Der obere Teil verwirrt mich und der einzige Grund, warum ich dies nicht selbst getestet habe, ist, dass ich noch lerne und kein privates Modul habe, an dem ich arbeiten kann. Wenn Sie Ihr Verzeichnis auf das Modul ändern und dann aufrufen, wird installdas dann nicht einfach dort installiert und nicht für das Projekt, für das Sie es verwenden möchten?
Adam Beck
11
Randnotiz: (a) Wenn Sie Git-Repos verwenden, können Sie einen Zweig / Commit / Tag angeben, indem Sie #<ref>am Ende der Git-URL ein hinzufügen , z git://github.com/visionmedia/express.git#v0.0.1. (b) Um sicher zu gehen, fügen Sie "private": truedie package.json Ihrer privaten Repos hinzu. Dadurch wird sichergestellt, dass Sie mit npm niemals versehentlich Ihre geheime Sauce in der offiziellen npm-Registrierung veröffentlichen können. (laut debuggable.com/posts/… )
Rafael Xavier
9
Zu Ihrer Information, wenn Sie Ihren Git über http bedienen, müssen Sie, npm i git+http://all/the/things.gitobwohl es gut git clone http://all/the/things.gitfunktioniert
slf
526

In Ihren privaten npm-Modulen hinzufügen

"private": true 

zu Ihrem package.json

Um dann auf das private Modul in einem anderen Modul zu verweisen, verwenden Sie dies in Ihrer package.json

{
    "name": "myapp",
    "dependencies": {
        "private-repo": "git+ssh://[email protected]:myaccount/myprivate.git#v1.0.0",
    }
}
250R
quelle
59
Dies ist die wirklich richtige Antwort, wenn Sie möchten, dass Ihre package.json die private Repo-Abhängigkeitsliste verwaltet. Dies ist eine gute Sache (tm), die Sie tun sollten.
6
In diesem Beispiel wird auf ein bestimmtes Tag verwiesen. Wenn Sie jedoch kein Tag haben, wird standardmäßig ein Master erstellt. (siehe git-scm.com/book/en/Git-Basics-Tagging )
250R
4
Ich verstehe nicht, wie diese Befehlszeile Code von einem privaten Github-Repo herunterladen kann, wenn ich meine Anmeldeinformationen nicht bereitstelle! Wie kann ich meine Github-Anmeldeinformationen weitergeben?
Renato Gama
28
Beachten Sie, dass das "private": trueTeil nicht erforderlich ist, aber es verhindert, dass Ihr privates Repo versehentlich in der öffentlichen npm-Registrierung veröffentlicht wird.
evanrmurphy
2
npm sucht auch nach mehreren Umgebungsvariablen. Aus dem Handbuch in diesem npm install <git remote url>Abschnitt gibt es Optionen wie GIT_ASKPASSund. GIT_SSHEin Beispiel für die Auswahl eines anderen Schlüssels als der Standard-ID_RSA:GIT_SSH_COMMAND='ssh -i ~/.ssh/custom_ident' npm install git+ssh://[email protected]:npm/npm.git
Jasmine Hegman
62

Kann ich einfach ein NPM-Paket installieren, das sich auf dem lokalen Dateisystem befindet, oder vielleicht sogar von Git?

Ja, du kannst! Aus den Dokumenten https://docs.npmjs.com/cli/install

Ein Paket ist:

  • a) einen Ordner mit einem Programm, das von einer package.json-Datei beschrieben wird
  • b) einen gezippten Tarball mit (a)
  • c) eine URL, die in (b) aufgelöst wird
  • d) a <name>@<version> , das in der Registrierung mit (c) veröffentlicht ist
  • e) a <name>@<tag> , das auf (d) zeigt
  • f) a <name> mit einem "neuesten" Tag, das (e) erfüllt
  • g) a <git remote url>, das sich zu (b) auflöst

Ist npm nicht brillant?

Oberst Panik
quelle
2
Beachten Sie, dass es sich bei Option b) tatsächlich um einen gezippten Tarball handeln muss. Ein reines Zip-Archiv reicht nicht aus. Dh wenn Sie Ihr Paket mit erstellen tar -czf my-package.tar.gz dist(vorausgesetzt, Ihr distOrdner enthält auch eine richtige package.jsonDatei), können Sie dies npm install ../my-lib/my-package.tar.gzaus Ihrem anderen Projekt heraus tun.
Dániel Kis-Nagy
48

Update Januar 2016

Neben anderen Antworten gibt es manchmal das Szenario, in dem private Module in einem Teamkontext verfügbar sein sollen.

Sowohl Github als auch Bitbucket unterstützen das Konzept der Generierung eines Team- API-Schlüssels . Dieser API-Schlüssel kann als Kennwort verwendet werden , um API-Anforderungen als dieses Team auszuführen.

In Ihren privaten npm-Modulen hinzufügen

"private": true 

zu Ihrem package.json

Um dann auf das private Modul in einem anderen Modul zu verweisen, verwenden Sie dies in Ihrer package.json

    {
        "name": "myapp",
        "dependencies": {
            "private-repo":
"git+https://myteamname:[email protected]/myprivate.git",
        }
    }

Dabei ist Teamname = myteamname und API-Schlüssel = aQqtcplwFzlumj0mIDdRGCbsAq5d6Xg4

Hier beziehe ich mich auf ein Bitbucket-Repo, aber es ist auch mit Github fast identisch.

Als Alternative können Sie jetzt, wenn es Ihnen wirklich nichts ausmacht, 7 US-Dollar pro Monat (zum Zeitpunkt des Schreibens) zu zahlen, sofort private NPM-Module verwenden.

arcseldon
quelle
Können Sie dies verwenden, wenn Sie ein globales Modul haben möchten?
PI.
Das funktioniert bei mir leider nicht. Sowohl das Remote- als auch das Repository werden nicht gefunden. Irgendwelche Ideen?
Thomas Bormans
@ ThomasBormans - immer noch Probleme? Bitte fügen Sie (verschlüsseln Sie Ihren Teamnamen / API-Schlüssel) das ein, was Sie als Zeile im Abhängigkeitsabschnitt Ihrer package.json haben - gemäß den obigen Anweisungen. Ich habe festgestellt, dass dies sowohl für private Github- als auch für Bitbucket-Repos gut funktioniert. Welches benutzt du?
Arcseldon
@arcseldon "name": "git + key: [email protected]/user/repo.git " gibt EISDIR zurück: Unzulässige Operation in einem Verzeichnis, lesen . Und "name": "git + user: [email protected]/repo.git " gibt mehrere Fehler zurück, einschließlich der folgenden Wörter : remote: Not Found, fatal: repository, Command failed: git clone . Irgendwelche Ideen?
Thomas Bormans
Versuchen Sie, dem "genauen" Format zu folgen, das ich in der Antwort angegeben habe: "git + https: // <myteamname>: <my_key> @ bitbucket.org / <my_repo_name> .git Wie haben Sie den API-Schlüssel generiert? Haben Sie ihn doppelt überprüft? es ist korrekt in Ihren Bitbucket-Einstellungen ... Entschuldigung, um das Offensichtliche zu fragen, aber ich habe
fast
30

FWIW: Ich hatte Probleme mit all diesen Antworten, wenn es um ein Repository für private Organisationen ging.

Folgendes hat bei mir funktioniert:

npm install -S "git+https://[email protected]/orgname/repositoryname.git"

Zum Beispiel:

npm install -S "git+https://[email protected]/netflix/private-repository.git"

Ich bin mir nicht ganz sicher, warum die anderen Antworten in diesem Fall bei mir nicht funktioniert haben, da ich sie zuerst ausprobiert habe, bevor ich auf Google geklickt und diese Antwort gefunden habe. Und die anderen Antworten sind die, die ich in der Vergangenheit gemacht habe.

Hoffentlich hilft das jemand anderem.

Ben Lesh
quelle
2
Können Sie einen Unterordner des Git Repo verwenden?
Chris
Hat 2019 für mich gearbeitet! Aber ich musste sicherstellen, dass Git über Anmeldeinformationen verfügt, um auf dieses Konto zugreifen zu können. (ZB teste git clone zweimal mit https://und
stelle
9

Ich hatte das gleiche Problem und fand nach einigem Suchen Reggie ( https://github.com/mbrevoort/node-reggie ). Es sieht ziemlich solide aus. Es ermöglicht das einfache Veröffentlichen von NPM-Modulen auf privaten Servern. Nicht perfekt (keine Authentifizierung bei der Installation) und es ist noch sehr jung, aber ich habe es lokal getestet und es scheint das zu tun, was es verspricht.

Das ist ... (und das nur aus ihren Dokumenten)

npm install -g reggie
reggie-server -d ~/.reggie

dann cd in dein Modulverzeichnis und ...

reggie -u http://<host:port> publish 
reggie -u http://127.0.0.1:8080 publish 

Schließlich können Sie Pakete von reggie installieren, indem Sie diese URL entweder in einem direkten npm-Installationsbefehl oder in einer package.json-Datei verwenden

npm install http://<host:port>/package/<name>/<version>
npm install http://<host:port>/package/foo/1.0.0

oder..

dependencies: {
    "foo": "http://<host:port>/package/foo/1.0.0"
}
bwest87
quelle
7

Strukturieren Sie Ihren Code wie unten beschrieben zugänglich. Wenn dies für Sie möglich ist.

  • NodeProjs \ Apps \ MainApp \ package.json

  • NodeProjs \ Modules \ DataModule \ package.json

In MainApp @ NodProjs \ Apps \ MainApp \

npm install --S ../../Modules/DataModule

Möglicherweise müssen Sie package.json wie folgt aktualisieren:

 "dependencies": {
       "datamodule": "../../Modules/DataModule"
}

Das hat für meine Situation funktioniert.

dynamiclynk
quelle
5

Npm bietet jetzt unbegrenzt private gehostete Module für 7 US-Dollar pro Benutzer und Monat an

cd private-project
npm login

in Ihrem Paket json set "name": " @username/private-project"

npm publish

dann, um Ihr Projekt zu fordern:

cd ../new-project
npm install --save @username/private-project
roo2
quelle
1
Benötigt dies einen clientseitigen Anmeldeschritt?
Aidan Hoolachan
Was ist eine Alternative dazu? Zum Beispiel, wenn Sie Ihr "Paket" auf S3 hosten und von dort abrufen möchten.
Con Antonakos
4

Beginnend mit der Antwort von arcseldon stellte ich fest, dass der Teamname in der URL wie folgt benötigt wurde:

npm install --save "git+https://myteamname@[email protected]/myteamname/myprivate.git"

Beachten Sie, dass der API-Schlüssel nur für das Team verfügbar ist, nicht für einzelne Benutzer.

Kramer
quelle
2

Konfigurieren Sie die Installation aus dem öffentlichen Github-Repository, auch wenn sich der Computer unter einer Firewall befindet:

dependencies: {
   "foo": "https://github.com/package/foo/tarball/master"
}
Alex Belozerov
quelle
2

Ich verwende Folgendes mit einem privaten Github-Repository:

npm install github:mygithubuser/myproject
Lars
quelle
2

Das habe ich gesucht :

# Get the latest from GitHub, public repo:
$ npm install username/my-new-project --save-dev
# Bitbucket, private repo:
$ npm install git+https://token:[email protected]/username/my-new-project.git#master
$ npm install git+ssh://[email protected]/username/my-new-project.git#master

#  or from Bitbucket, public repo:
$ npm install git+ssh://[email protected]/username/my-new-project.git#master --save-dev
# Bitbucket, private repo:
$ npm install git+https://username:[email protected]/username/my-new-project.git#master
$ npm install git+ssh://[email protected]/username/my-new-project.git#master
# Or, if you published as npm package:
$ npm install my-new-project --save-dev
Jesaja
quelle
2

Sie können Verdaccio verwenden für diesen Zweck Hierbei handelt es sich um eine einfache private npm-Proxy-Registrierung, die in Node.js erstellt wurde. Es ist auch kostenlos und Open Source. Durch die Verwendung von Verdaccio ist der Aufwand nicht so hoch wie bei einer einfachen privaten npm-Registrierung.

Detaillierte Informationen zur Installation und Ausführung finden Sie auf der Website. Hier sind die folgenden Schritte:

Es erfordert node >=8.x.

    // Install it from npm globally
    npm install -g verdaccio

    // Simply run with the default configuration that will host the registry which you can reach at http://localhost:4873/
    verdaccio

    // Set the registry for your project and every package will be downloaded from your private registry
    npm set registry http://localhost:4873/

    // OR use the registry upon individual package install
    npm install --registry http://localhost:4873

Es hat auch ein Docker, so dass Sie es einfach in Ihrem öffentlich verfügbaren Docker veröffentlichen können, und voila, Sie haben ein privates npm-Repository, das auf andere Weise an andere verteilt werden kann, während Sie es konfigurieren!

Dominik
quelle
0

Sehr einfach -

npm config set registry https://path-to-your-registry/

Es setzt registry = "https://path-to-your-registry"diese Zeile tatsächlich auf/Users/<ur-machine-user-name>/.npmrc

Alle Werte, die Sie explizit oder standardmäßig festgelegt haben, können angezeigt werden durch - npm config list

sapy
quelle