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
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
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",
}
}
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?
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.
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.
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"
}
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.
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.
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
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!
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
Ich verwende folgendes mit einem privaten github-Repository:
npm install github:mygithubuser/myproject
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"
}
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.