389 Stimmen

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

Ich habe einigen gemeinsam genutzten Code in ein NPM-Modul aufgenommen, das ich nicht in die zentrale Registrierung hochladen möchte. Die Frage ist, wie ich es aus anderen Projekten installieren kann.

Der naheliegendste Weg ist wahrscheinlich, eine eigene NPM-Registrierung einzurichten, aber laut der Dokumentation ist das mit viel Aufwand verbunden.

Kann ich einfach ein NPM-Modul installieren, das sich im lokalen Dateisystem befindet, oder vielleicht sogar aus Git?

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

580voto

250R Punkte 33507

In Ihrem private npm-Module hinzufügen.

"private": true 

zu Ihrer package.json

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

{
    "name": "myapp",
    "dependencies": {
        "private-repo": "git+ssh://git@github.com:myaccount/myprivate.git#v1.0.0",
    }
}

65 Stimmen

Dies ist die real korrekte Antwort, wenn Sie möchten, dass Ihre package.json die Liste der Abhängigkeiten des privaten Repo beibehält, was eine gute Sache(tm) ist, die Sie tun sollten.

0 Stimmen

Danke - das ist perfekt. Ein Problem - es funktioniert, wenn ich die #-Version am Ende nicht einschließen, aber wenn ich das tue, bekomme ich eine Fehlermeldung wie diese: "Fehler: Command failed: fatal: ambiguous argument 'v0.0.1': unknown revision or path not in the working tree." Ich kann keine Lösung für dieses Problem finden. Wissen Sie, was hier los ist?

7 Stimmen

Im Beispiel wird auf ein bestimmtes Tag verwiesen, aber wenn Sie keins haben, wird es standardmäßig auf Master gesetzt. (siehe git-scm.com/book/de/Git-Basics-Tagging )

299voto

mihai Punkte 35227
cd somedir
npm install .

o

npm install path/to/somedir

somedir muss die package.json in ihm.

Es kennt sich auch mit Git aus:

npm install git://github.com/visionmedia/express.git

4 Stimmen

Die Lösung path/to/somedir funktioniert zwar irgendwie, aber es ist irgendwie schrecklich, weil alle require-Anweisungen dann diesen relativen oder absoluten Pfad einschließen müssen. Bitte korrigieren Sie mich, wenn ich etwas falsch mache...

4 Stimmen

@Luke ja, du irrst dich. Nach npm install werden alle Dateien in Ihr Projektverzeichnis kopiert. Daher sind die Pfade in der require Anweisungen werden nur relativ zu Ihrem Projektverzeichnis sein.

4 Stimmen

Der obere Teil verwirrt mich, und der einzige Grund, warum ich das nicht selbst getestet habe, ist, dass ich noch lerne und kein eigenes Modul habe, an dem ich arbeiten kann. Wie auch immer, indem Sie das Verzeichnis ändern, in dem sich das Modul befindet, und dann install würde das nicht nur dort installiert werden und nicht für das Projekt, für das Sie es verwenden wollen?

68voto

Colonel Panic Punkte 125419

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

Ja, das können Sie! Aus den Unterlagen https://docs.npmjs.com/cli/install

Ein Paket ist:

  • a) einen Ordner, der ein durch eine package.json-Datei beschriebenes Programm enthält
  • b) einen gzipped tarball, der (a) enthält
  • c) eine Url, die zu (b) auflöst
  • d) eine <name>@<version> die im Register mit (c) veröffentlicht wird
  • e) eine <name>@<tag> die auf (d) zeigt
  • f) eine <name> die ein "latest"-Tag haben, das (e) genügt
  • g) eine <git remote url> die sich zu (b) auflöst

Ist npm nicht genial?

2 Stimmen

Beachten Sie, dass es sich bei Option b) tatsächlich um eine gezippter Tarball reicht ein einfaches Zip-Archiv nicht aus. D.h. wenn Sie Ihr Paket mit tar -czf my-package.tar.gz dist (vorausgesetzt, Ihr dist Ordner hat auch eine eigene package.json Datei darin), dann können Sie npm install ../my-lib/my-package.tar.gz aus Ihrem anderen Projekt.

55voto

arcseldon Punkte 32403

Update Januar 2016

Zusätzlich zu den anderen Antworten In manchen Fällen möchten Sie private Module in einem Teamkontext zur Verfügung haben.

Beide Github y Bitbucket das Konzept der Bildung eines Teams unterstützen API-Schlüssel . Dieser API-Schlüssel kann verwendet werden als Passwort um API-Anfragen als dieses Team durchzuführen.

In Ihrem private npm-Module hinzufügen.

"private": true 

zu Ihrem paket.json

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

    {
        "name": "myapp",
        "dependencies": {
            "private-repo":
"git+https://myteamname:aQqtcplwFzlumj0mIDdRGCbsAq5d6Xg4@bitbucket.org/myprivate.git",
        }
    }

donde Teamname = meinTeamname y API-Schlüssel = aQqtcplwFzlumj0mIDdRGCbsAq5d6Xg4

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

Wenn es Ihnen wirklich nichts ausmacht, zu zahlen, können Sie alternativ auch 7 Dollar pro Monat (zum Zeitpunkt der Erstellung dieses Dokuments), dann können Sie jetzt private NPM-Module aus der Schachtel.

0 Stimmen

Können Sie dies verwenden, wenn Sie ein globales Modul haben möchten?

0 Stimmen

Ich fürchte, das funktioniert bei mir nicht. Sowohl die Fernbedienung als auch das Repository werden nicht gefunden. Irgendwelche Ideen?

0 Stimmen

@ThomasBormans - haben Sie immer noch Probleme? Bitte fügen Sie (verschlüsseln Sie Ihren Teamnamen / api-Schlüssel), was Sie als Ihre Zeile in dependencies Abschnitt Ihres package.json haben - gemäß den obigen Anweisungen. Ich habe festgestellt, dass dies sowohl bei Github als auch bei Bitbucket Private Repos gut funktioniert. Welche verwenden Sie?

31voto

Ben Lesh Punkte 106494

FWIW: Ich hatte Probleme mit all diesen Antworten, als ich mit einem Repository einer privaten Organisation zu tun hatte.

Bei mir hat das Folgende funktioniert:

npm install -S "git+https://username@github.com/orgname/repositoryname.git"

Zum Beispiel:

npm install -S "git+https://blesh@github.com/netflix/private-repository.git"

Ich bin mir nicht ganz sicher, warum die anderen Antworten in diesem Fall bei mir nicht funktionierten, denn ich habe sie ausprobiert erste bevor ich Google bemühte und diese Antwort fand. Und die anderen Antworten sind das, was ich in der Vergangenheit getan habe.

Hoffentlich hilft das jemand anderem.

2 Stimmen

Können Sie einen Unterordner des Git-Repos verwenden?

0 Stimmen

Das hat bei mir 2019 funktioniert! Aber ich musste sicherstellen git hat Anmeldeinformationen um auf dieses Konto zuzugreifen. (z. B. testet git clone zweimal mit https:// und stellen Sie sicher, dass das Passwort beim zweiten Durchlauf nicht mehr benötigt wird. Dann sind Sie startklar).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X