Wie installiere ich ein npm-Paket direkt von GitHub?

870

Der Versuch, Module von Github zu installieren, führt zu:

ENOENT-Fehler in package.json.

Einfach mit Express zu reproduzieren:

npm install https://github.com/visionmedia/express wirft Fehler.

npm install express funktioniert.

Warum kann ich nicht von Github installieren?

Hier ist die Konsolenausgabe:

npm http GET https://github.com/visionmedia/express.git
npm http 200 https://github.com/visionmedia/express.git
npm ERR! not a package /home/guym/tmp/npm-32312/1373176518024-0.6586997057311237/tmp.tgz
npm ERR! Error: ENOENT, open '/home/guym/tmp/npm-32312/1373176518024-0.6586997057311237/package/package.json'
npm ERR! If you need help, you may report this log at:
npm ERR!     <http://github.com/isaacs/npm/issues>
npm ERR! or email it to:
npm ERR!     <[email protected]>

npm ERR! System Linux 3.8.0-23-generic
npm ERR! command "/usr/bin/node" "/usr/bin/npm" "install" "https://github.com/visionmedia/express.git"
npm ERR! cwd /home/guym/dev_env/projects_GIT/proj/somename
npm ERR! node -v v0.10.10
npm ERR! npm -v 1.2.25
npm ERR! path /home/guym/tmp/npm-32312/1373176518024-0.6586997057311237/package/package.json
npm ERR! code ENOENT
npm ERR! errno 34
npm ERR! 
npm ERR! Additional logging details can be found in:
npm ERR!     /home/guym/dev_env/projects_GIT/proj/somename/npm-debug.log
npm ERR! not ok code 0
Kerl Mograbi
quelle
1
Kann jemand das package.json devDependencies-Format angeben?
Adam
1
@Adam können Sie "express": "github:visionmedia/express"zum "dependencies"Abschnitt hinzufügen package.json file, dann ausführen: npm install(wie unten erwähnt)
Danny
@danny, das funktioniert bei mir nicht. Ich frage mich, ob es in diesem Express-Repo einen dist-Ordner gab, um es zu aktivieren.
ml242

Antworten:

1158

Denn https://github.com/visionmedia/expressist die URL einer Webseite und kein npm-Modul. Verwenden Sie diesen Geschmack:

git+https://[email protected]/visionmedia/express.git

oder dieses Aroma, wenn Sie SSH benötigen:

git+ssh://[email protected]/visionmedia/express.git
Peter Lyons
quelle
86
Sie können auch git+https://github.com/visionmedia/express.githttps anstelle von ssh verwenden.
Steve Willcock
43
Beachten Sie, dass das Repository, das Sie installieren möchten, ein npm-Modul sein muss, eine package.jsonDatei enthalten muss, sonst wird folgende Fehlermeldung angezeigt : Error: ENOENT, open 'tmp.tgz-unpack/package.json'.
GabLeRoux
20
Was ist, wenn ich einen bestimmten Zweig möchte
Kilianc
3
Die einzige Lösung, an die ich im Moment denke, besteht darin, ein Commit mit ... / express.git # commit
Gaston Sanchez
39
Worth sagt , dass Sie die entkommen müssen möglicherweise #einen bestimmten Zweig aus der Schale zu verwenden, dh:npm install git+https://github.com/user/repo.git\#branch
mor
655

Sie können auch tun npm install visionmedia/express von Github installieren

oder

npm install visionmedia/express#branch

Es gibt auch Unterstützung für die direkte Installation von Gist, Bitbucket, Gitlab und einer Reihe anderer spezialisierter Formate. Schauen Sie sich die npm install Dokumentation für alle an.

user2487135
quelle
19
Was, ohne URL anzugeben? Woher weiß npm, welchen Flavour-Hosting-Service Sie verwenden?
Jake Rayson
22
@ Jake Rayson: Es ist seit Version 1.1.65 möglich und funktioniert github.comnur für .
Ezze
5
Hat unter Windows nicht funktioniert - es wurde nur versucht, aus einem Unterordner meines aktuellen Verzeichnisses zu installieren.
Jarrod Mosen
7
Beachten Sie, dass dies bei globalen Installationen (dh npm i repo / pkg -g) ab npm 1.4.28
user3751385
1
@ user3751385 Globale Installationen scheinen in npm 3.3.8 zu funktionieren.
XåpplI'-I0llwlg'I -
170

Wenn git nicht installiert ist, können wir es versuchen

npm install --save https://github.com/Amitesh/gulp-rev-all/tarball/master
Amitesh
quelle
10
Gute Antwort! Es hat bei mir funktioniert, während andere Befehle (aus anderen Antworten) an einer Git-Abruflogik festhielten.
Daniel Kmak
2
Sie können auch Tag-Namen anstelle von verwenden master. Wahrscheinlich sicherer, es so zu machen.
Mpen
4
Nizza, wenn Sie mit Niederlassungen arbeiten, sollten Sie Ihre Antwort ändern , um eine allgemeine Format Antwort aufzunehmen, ich habe nicht bemerkt , die /tarball/auf den ersten
Lu Roman
2
Dies ist die einzige Antwort, die bei der Installation einer Abhängigkeit aus einem Docker-Container für mich funktioniert hat.
Fela Maslen
1
Dies ist auch perfekt, um nicht das gesamte Repo herunterladen zu müssen. Vielen Dank!
som
58

Update September 2016

Die Installation von Vanille-https-Github-URLs funktioniert jetzt:

npm install https://github.com/fergiemcdowall/search-index.git

BEARBEITEN 1: Es gibt einige Benutzer, die kommentieren, dass Sie dies nicht für alle Module tun können, da Sie von einem Versionsverwaltungssystem lesen, das möglicherweise ungültigen / nicht kompilierten / fehlerhaften Code enthält. Um es klar zu sagen (obwohl es selbstverständlich sein sollte): Da sich der Code im Repo in einem npm-verwendbaren Zustand befindet , können Sie ihn jetzt ganz einfach direkt von Github aus installieren

EDIT 2: (21-10-2019) Wir erleben jetzt "Peak Typescript / React / Babel", und daher ist die JavaScript-Kompilierung weit verbreitet. Wenn Sie die Kompilierung berücksichtigen müssen, schauen Sie in prepare. Dies vorausgeschickt , NPM - Module nicht muß erstellt werden , und es ist ratsam , dass Kompilation anzunehmen , ist nicht der Standard, vor allem für ältere Knotenmodule (und möglicherweise auch für sehr neu, bleeding-edge „ESNext“ -y ist).

Fergie
quelle
9
Sie können kein beliebiges npm-Paket von der GitHub-Quelle installieren, es sei denn, das Repo enthält einen distOrdner, und die meisten tun dies nicht. Das Problem, mit dem ich verlinkt habe, ist ein npm-Fehler - der prebuildSchritt wird bei der Installation von GitHub nicht ausgeführt. Versuchen Sie beispielsweise, Node-Influx / Node-Influx zu installieren .
Dan Dascalescu
4
Repos ohne distOrdner KÖNNEN von GitHub installiert werden, zum Beispiel: npm install https://github.com/fergiemcdowall/search-index-adderfunktioniert einwandfrei.
Fergie
4
Richtig, weil Sie die direkt verwendbare Quelle in haben /lib(als ob Sie einen dist-Ordner hätten). Mein Punkt ist, dass es nicht garantiert ist, nur die GitHub-URL eines Repos in package.jons aufzunehmen, um dieses Repo zu installieren. In TypeScript geschriebene Module müssen beispielsweise ihren transpilierten Code in das Repo übertragen. Normalerweise tun sie dies nicht, sondern verwenden ein vorveröffentlichtes Skript, um den .JS-Code in einem dist-Ordner abzulegen, der auf npmjs.com hochgeladen wird.
Dan Dascalescu
2
Ich weiß, dass dies etwas spät ist, aber der Trick ist, dass npm keine 1-zu-1-Zuordnung zu Git-Repositorys hat. Einige Projekte erstellen ihre Quelldateien vor dem Veröffentlichen und nicht vor dem Festschreiben. Dies bedeutet, dass sie sich NICHT im Git-Repo befinden, sondern im npm-Paket - Projekte, die dies tun, funktionieren nicht direkt von Git aus. Ein weiteres Beispiel dafür, wie dies fehlschlagen kann, sind Makro-Repositorys. Das GitHub-Projekt von Babel enthält beispielsweise Hunderte einzelner npm-Pakete in Unterordnern. Sie können einzeln veröffentlicht werden, da npm nicht direkt Git zugeordnet ist. npm veröffentlicht alles, was sich in Ihrem Verzeichnis befindet.
John Chadwick
13
Für alle, die später darauf stoßen ... Ab npm5 führt npm jedes prepareSkript für bloße "Installationen" aus, einschließlich Git-Deps. Dies bedeutet, dass die obigen Kommentare zu Kompilierungs- und Dist-Ordnern nicht mehr aktuell sind. Jedes Paket, das die Kompilierung ordnungsgemäß für die Ausführung festlegt, funktioniert einwandfrei prepareals Git-Dep, ohne kompilierte Assets in Git zu übernehmen.
Jason Karns
54

Es gibt auch npm install https://github.com/{USER}/{REPO}/tarball/{BRANCH}einen anderen Zweig.

zakelfassi
quelle
Ich bin auf dieses Problem gestoßen ... github.com/yarnpkg/yarn/issues/2738 Ich konnte die Registrierung in die Github-Tarball-Registrierung ändern und es hat funktioniert. Danke!
Matt Goo
Dies löste einige wichtige Leistungsprobleme für mich. Die Verwendung von {USER} / {REPO} .git # {BRANCH} war sehr langsam.
Erik Koopmans
37

Die aktuelle Top-Antwort von Peter Lyons ist bei aktuellen NPM-Versionen nicht relevant. Zum Beispiel ist es jetzt in Ordnung, denselben Befehl zu verwenden, der in dieser Antwort kritisiert wurde.

$ npm install https://github.com/visionmedia/express

Wenn Sie weiterhin Probleme haben, liegt möglicherweise ein Problem mit dem von Ihnen verwendeten Paket vor.

Colin D.
quelle
Es leitet jetzt auch automatisch zu github.com/expressjs/express um, wenn Sie diesen Befehl verwenden :)
Colin D
33

Die Methoden werden jetzt in der Installationsdokumentation von npm sowie in den zahlreichen anderen Antworten hier ziemlich gut behandelt .

npm install git+ssh://[email protected]:<githubname>/<githubrepo.git[#<commit-ish>]
npm install git+ssh://[email protected]:<githubname>/<githubrepo.git>[#semver:^x.x]
npm install git+https://[email protected]/<githubname>/<githubrepo.git>
npm install git://github.com/<githubname>/<githubrepo.git>
npm install github:<githubname>/<githubrepo>[#<commit-ish>]

Bemerkenswert ist jedoch, dass npm das prepareSkript hinzufügt, um das Skript zu ersetzen prepublish. Dies behebt ein langjähriges Problem, bei dem über git installierte Module das prepublishSkript nicht ausgeführt und daher die Erstellungsschritte nicht ausgeführt haben, die beim Veröffentlichen eines Moduls in der npm-Registrierung auftreten. Siehe https://github.com/npm/npm/issues/3055 .

Natürlich müssen die Modulautoren ihre package.json aktualisieren, um die neue prepareDirektive zu verwenden, damit dies funktioniert.

nextgentech
quelle
19

UPDATE jetzt können Sie tun: npm install git://github.com/foo/bar.git
oder inpackage.json :

"dependencies": {
  "bar": "git://github.com/foo/bar.git"
}
Sagiv Ofek
quelle
19

Die allgemeine Form der Syntax ist

<protocol>://[<user>[:<password>]@]<hostname>[:<port>][:][/]<path>[#<commit-ish> | #semver:<semver>]

was bedeutet für Ihren Fall wird es sein

npm install git+ssh://[email protected]/visionmedia/express.git

Aus npmjs docs:

npm installieren:

Installiert das Paket vom gehosteten Git-Anbieter und klont es mit Git. Bei einer vollständigen Git-Remote-URL wird nur diese URL versucht.

<protocol>://[<user>[:<password>]@]<hostname>[:<port>][:][/]<path>[#<commit-ish>

| #semver:] ist eine der Dateien git, git + ssh, git + http, git + https oder git +.

Wenn # angegeben ist, wird es verwendet, um genau dieses Commit zu klonen. Wenn das Commit-ish das Format #semver: hat, kann es sich um einen beliebigen gültigen Semver-Bereich oder eine genaue Version handeln, und npm sucht nach Tags oder Refs, die diesem Bereich im Remote-Repository entsprechen, ähnlich wie bei einer Registrierungsabhängigkeit. Wenn weder # noch

semver: wird angegeben, dann wird master verwendet.

Wenn das Repository Submodule verwendet, werden diese Submodule ebenfalls geklont.

Wenn das zu installierende Paket ein Vorbereitungsskript enthält, werden seine Abhängigkeiten und devDependencies installiert und das Vorbereitungsskript wird ausgeführt, bevor das Paket gepackt und installiert wird.

Die folgenden Git-Umgebungsvariablen werden von npm erkannt und beim Ausführen von Git zur Umgebung hinzugefügt:

  • GIT_ASKPASS
  • GIT_EXEC_PATH
  • GIT_PROXY_COMMAND
  • GIT_SSH
  • GIT_SSH_COMMAND
  • GIT_SSL_CAINFO GIT_SSL_NO_VERIFY

Weitere Informationen finden Sie auf der Git-Manpage.

Beispiele:

npm install git+ssh://[email protected]:npm/npm.git#v1.0.27
npm install git+ssh://[email protected]:npm/npm#semver:^5.0
npm install git+https://[email protected]/npm/npm.git
npm install git://github.com/npm/npm.git#v1.0.27
GIT_SSH_COMMAND='ssh -i ~/.ssh/custom_ident' npm install git+ssh://[email protected]:npm/npm.git npm install
ishandutta2007
quelle
14

Installieren Sie es direkt:

npm install visionmedia/express

Alternativ können Sie hinzufügen , "express": "github:visionmedia/express"um den "dependencies"Abschnitt der package.jsonDatei, dann führen:

npm install
Tyler Long
quelle
9

Sie könnten auch tun

npm i alex-cory/fasthacks

oder

npm i github:alex-cory/fasthacks

Grundsätzlich:

npm i user_or_org/repo_name
Alex Cory
quelle
6

Sie können ein Github-Repo npm installwie folgt direkt per Befehl installieren : npm install https://github.com/futurechallenger/npm_git_install.git --save

HINWEIS: Im Repo, das mit dem Befehl npm installiert wird:

  1. Vielleicht musst du einen dist haben du laut @Dan Dascalescus Kommentar Ordner in deinem Repo haben.
  2. Sie müssen auf jeden Fall ein package.json in Ihrem Repo haben! was ich vergessen hinzufügen.
Bruce Lee
quelle
1
Sie benötigen keinen distOrdner oder Build-Code in Ihrem Repo. Sie müssen nur ein prepareSkript in verwenden package.json.
Cameron Tacklind
4

Einfach:

npm install *GithubUrl*.git --save

Beispiel:

npm install https://github.com/visionmedia/express.git --save
Khurshid Ansari
quelle
0

Ich habe es versucht npm install git+https://github.com/visionmedia/express aber das hat viel zu lange gedauert und ich war mir nicht sicher, ob das funktionieren würde.

Was für mich funktioniert hat war - yarn add git+https://github.com/visionmedia/express.

Zephyr
quelle
-3

Versuchen Sie diesen Befehl

 npm install github:[Organisation]/[Repository]#[master/BranchName] -g

Dieser Befehl hat bei mir funktioniert.

 npm install github:BlessCSS/bless#3.x -g
Rahil Lakhani
quelle
12
VERWENDEN SIE SUDO NICHT MIT NPM INSTALL! Verwenden Sie lieber chown, um den Besitzer zu wechseln.
Marek Fajkus
Die Version ist der Tag- / Zweigstellenname oder die package.json-Version?
Mfrachet
@MarekFajkus Wenn Sie unter Linux über einen Paketmanager mit sudo installieren ... müssen Sie root verwenden, wenn Sie Pakete global installieren möchten
Ray Foss
1
@RayFoss Ein Jahr zu spät, aber ... das ist nur möglich, wenn das global installierte Paket allen Benutzern zur Verfügung stehen soll, was selten der Fall ist. Konfigurieren Sie einfach npm für die Installation globaler Pakete ~/node_modules, dann brauchen Sie nie sudo.
Mr5o1