web-dev-qa-db-de.com

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

Ich habe etwas gemeinsam genutzten Code in ein NPM-Modul aufgenommen, das ich nicht in die zentrale Registry hochladen möchte. Die Frage ist, wie installiere ich es aus anderen Projekten?

Der naheliegendste Weg ist wahrscheinlich, ein eigenes NPM-Register einzurichten, aber laut Dokumentation ist dies viel Aufwand.

Kann ich einfach ein NPM-Modul installieren, das auf dem lokalen Dateisystem oder vielleicht sogar von git installiert ist?

npm install --from-git [email protected]:project
291
futlib
cd somedir
npm install .

oder 

npm install path/to/somedir

somedir muss den package.json enthalten.

Es weiß auch über git:

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

In Ihren privaten npm-Modulen add 

"private": true 

zu Ihrem package.json

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

{
    "name": "myapp",
    "dependencies": {
        "private-repo": "git+ssh://[email protected]:myaccount/myprivate.git#v1.0.0",
    }
}
482
250R

Kann ich einfach ein NPM-Paket installieren, das auf dem lokalen Dateisystem oder vielleicht sogar von git liegt?

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

Ein Paket ist:

  • a) einen Ordner, der ein Programm enthält, das in einer package.json-Datei beschrieben ist 
  • b) ein gezippter Tarball mit (a) 
  • c) eine URL, die in (b) aufgelöst wird 
  • d) ein <name>@<version>, der in der Registry mit (c) veröffentlicht ist 
  • e) ein <name>@<tag>, der auf (d) zeigt 
  • f) ein <name> mit einem "neuesten" Tag, der (e) genügt 
  • g) a <git remote url>, der in (b) aufgelöst wird 

Ist npm nicht brillant?

59
Colonel Panic

Update Januar 2016

Zusätzlich zu anderen Antworten gibt es manchmal das Szenario, in dem Sie private Module in einem Teamkontext verfügbar haben möchten. 

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

In Ihren privaten npm-Modulen hinzufügen 

"private": true 

zu Ihrem package.json

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

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

wobei Teamname = MeinTeamnameund API-Schlüssel = aQqtcplwFzlumj0mIDdRGCbsAq5d6Xg4

Ich beziehe mich hier auf ein Bitbucket-Repo, aber es ist mit github fast identisch.

Wenn Sie wirklich nichts dagegen haben, $ 7 pro Monat zu zahlen (zum Zeitpunkt des Schreibens), können Sie jetzt private NPM-Module out of the box haben.

42
arcseldon

FWIW: Ich hatte Probleme mit all diesen Antworten, wenn es um ein privates Organisationsrepository ging.

Folgendes hat für mich gearbeitet:

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 einen Fall nicht für mich funktionierten, weil sie das waren, was ich first ausprobierte, bevor ich auf Google stieß und diese Antwort fand. Und die anderen Antworten sind das, was ich in der Vergangenheit gemacht habe.

Hoffentlich hilft das jemand anderem.

27
Ben Lesh

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

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

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

dann cd in ihr 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 einfach installieren, indem Sie diese URL entweder in einem direkten npm-Installationsbefehl oder von einer package.json-Instanz aus 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"
}
7
bwest87

Strukturieren Sie Ihren Code wie unten beschrieben. Wenn das für Sie möglich ist.

  • NodeProjs\Apps\MainApp\package.json

  • NodeProjs\Modules\DataModule\package.json

Innerhalb von MainApp @ NodProjs\Apps\MainApp\

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

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

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

Das hat für meine Situation funktioniert.

6
C0r3yh

Beginnend mit arcseldons Antwort habe ich festgestellt, dass der Teamname in der URL wie folgt benötigt wurde:

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

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

3
Kramer

Npm bietet jetzt unbegrenzte private gehostete Module für $ 7/Benutzer/Monat, die auf diese Weise verwendet werden

cd private-project
npm login

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

npm publish

dann benötigen sie ihr projekt:

cd ../new-project
npm install --save @username/private-project
2
roo2

Sie können Verdaccio für diesen Zweck verwenden. Hierbei handelt es sich um eine kompakte private npm-Proxy-Registrierung, die in Node.js erstellt wurde. Es ist auch kostenlos und Open Source. Durch die Verwendung von Verdaccio ist dies nicht so umständlich wie bei einer normalen privaten Npm-Registrierung.

Detaillierte Informationen zur Installation und Ausführung finden Sie auf deren Website hier jedoch die 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 einen Docker, so dass Sie ihn einfach in Ihrem öffentlich zugänglichen Docker veröffentlichen können, und voila Sie haben ein privates npm-Repository, das auf eine Weise an andere verteilt werden kann, wie Sie es konfigurieren!

1
Dominik

Das war was ich gesucht habe :

# 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
1
Isaiah

Ich verwende folgendes mit einem privaten github-Repository:

npm install github:mygithubuser/myproject
1
Lars

Konfiguration zur Installation aus einem öffentlichen Github-Repository, auch wenn sich der Computer unter einer Firewall befindet:

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

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 mit - npm config list eingesehen werden.

0
sapy