Jak zainstalować pakiet npm bezpośrednio z GitHub?


870

Próba instalacji modułów z github powoduje:

Błąd ENOENT w pliku package.json.

Łatwo reprodukowane za pomocą ekspresu:

npm install https://github.com/visionmedia/express zgłasza błąd.

npm install express Pracuje.

Dlaczego nie mogę zainstalować z github?

Oto dane wyjściowe konsoli:

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!     <npm-@googlegroups.com>

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

1
Czy ktoś może podać format devDependencies pliku package.json?
— Adam

1
@Adam możesz dodać "express": "github:visionmedia/express"do "dependencies"sekcji package.json file, a następnie uruchomić: npm install(jak wspomniano poniżej)
— Danny

@ Danny, to nie działa dla mnie. Zastanawiam się, czy w tym ekspresowym repozytorium był folder dist, aby go włączyć.
— ml242

Odpowiedzi:


1158

Ponieważ https://github.com/visionmedia/expressjest to adres URL strony internetowej, a nie moduł npm. Użyj tego smaku:

git+https://git@github.com/visionmedia/express.git

lub ten smak, jeśli potrzebujesz SSH:

git+ssh://git@github.com/visionmedia/express.git

86
Możesz także użyć, git+https://github.com/visionmedia/express.gitaby użyć https zamiast ssh.
— Steve Willcock

43
Zauważ, że repozytorium chcesz zainstalować musi być moduł npm , musi zawierać package.jsonplik albo dostaniesz ten błąd: Error: ENOENT, open 'tmp.tgz-unpack/package.json'.
— GabLeRoux

20
co jeśli chcę konkretną gałąź
— kilianc

3
Jedynym rozwiązaniem, o którym teraz myślę, jest określenie zatwierdzenia za pomocą ... / express.git # commit
— Gaston Sanchez

39
Warto powiedzieć, że być może trzeba będzie uciec, #aby użyć określonej gałęzi z powłoki, tj .:npm install git+https://github.com/user/repo.git\#branch
— mor

655

Możesz także zrobić npm install visionmedia/expressinstalację z Github

lub

npm install visionmedia/express#branch

Istnieje również obsługa instalacji bezpośrednio z Gist, Bitbucket, Gitlab i wielu innych specjalistycznych formatów. Spójrz na npm install dokumentację dla nich wszystkich.


19
Co bez podania adresu URL? Skąd npm wie, jakiej usługi hostingowej smaków używasz?
— Jake Rayson,

22
@Jake Rayson: jest to możliwe od wersji 1.1.65 i działa github.comtylko dla .
— ezze

5
Nie działało dla mnie w systemie Windows - po prostu próbowałem zainstalować z podfolderu mojego bieżącego katalogu.
— Jarrod Mosen

7
Uwaga: nie działa to w przypadku instalacji globalnych (tj. Npm i repo / pkg -g) od npm 1.4.28
— użytkownik3751385

1
@ user3751385 Wydaje się, że globalne instalacje działają w npm 3.3.8.
— XåpplI'-I0llwlg'I -

170

Jeśli git nie jest zainstalowany, możemy spróbować

npm install --save https://github.com/Amitesh/gulp-rev-all/tarball/master

10
Świetna odpowiedź! Działa to dla mnie, podczas gdy inne polecenia (z innych odpowiedzi) utknęły w logice pobierania git.
— Daniel Kmak

2
Możesz także użyć nazw znaczników zamiast master. Prawdopodobnie bezpieczniej to zrobić w ten sposób.
— mpen

4
Miły dla podczas pracy z gałęziami, należy zmodyfikować odpowiedź zawierać ogólny format odpowiedzi, ja nie zauważyłem /tarball/na początku
— Lu Roman

2
To jedyna odpowiedź, która zadziałała dla mnie podczas instalowania zależności z poziomu kontenera Docker.
— Fela Maslen,

1
Jest to również idealne rozwiązanie, ponieważ nie wymaga pobierania całego repozytorium. Dzięki!
— som

58

Aktualizacja z września 2016 r

Instalacja z waniliowych adresów URL https github działa teraz:

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

EDYCJA 1: kilku użytkowników komentuje, że nie możesz tego zrobić dla wszystkich modułów, ponieważ czytasz z systemu kontroli źródła, który może również zawierać nieprawidłowy / nieskompilowany / błędny kod. Tak więc dla jasności (chociaż powinno to być oczywiste): biorąc pod uwagę, że kod w repozytorium jest w stanie użytecznym npm , możesz teraz całkiem szczęśliwie zainstalować bezpośrednio z github

EDYCJA 2: (21-10-2019) Obecnie przeżywamy „szczyt Typescript / React / Babel”, dlatego kompilacja JavaScript stała się dość powszechna. Jeśli potrzebujesz wziąć pod uwagę kompilację, zajrzyj do prepare. To powiedziawszy, moduły NPM nie muszą być kompilowane i mądrze jest założyć, że kompilacja nie jest domyślna, szczególnie dla starszych modułów węzłów (i być może również dla bardzo nowych, najnowocześniejszych „ESNext” -y).


9
Nie możesz zainstalować żadnego pakietu npm z jego źródła GitHub, chyba że repo zawiera distfolder, a większość nie. Problem, z którym się powiązałem, to błąd npm - prebuildkrok ten nie jest uruchamiany podczas instalacji z GitHub. Jako przykład spróbuj zainstalować node-influx / node-influx .
— Dan Dascalescu

4
Repozytoria bez distfolderów MOŻNA zainstalować z GitHub, na przykład: npm install https://github.com/fergiemcdowall/search-index-adderdziała idealnie.
— Fergie,

4
Racja, ponieważ masz bezpośrednio źródło usabel /lib(tak jakbyś miał folder dist). Chodzi mi o to, że samo włączenie adresu URL GitHub do repozytorium w pliku package.jons nie gwarantuje, że będzie działało podczas instalowania tego repozytorium. Na przykład moduły napisane w TypeScript muszą wepchnąć swój przetłumaczony kod do repozytorium. Zazwyczaj tego nie robią, ale raczej używają skryptu prepublish do zrzucenia kodu .JS do folderu dist, który jest przesyłany do npmjs.com.
— Dan Dascalescu,

2
Wiem, że to trochę za późno, ale sztuczka polega na tym, że npm nie ma mapowania 1 na 1 do repozytoriów Git. Niektóre projekty budują swoje pliki źródłowe przed opublikowaniem, a nie przed zatwierdzeniem, co oznacza, że ​​NIE są one w repozytorium Git, ale byłyby w pakiecie npm - projekty, które to robią, nie będą działać bezpośrednio z Git. Innym przykładem tego, jak może się to nie powieść, są repozytoria makr - na przykład projekt GitHub Babela zawiera w podfolderach setki indywidualnych pakietów npm. Można je publikować indywidualnie, ponieważ npm nie mapuje bezpośrednio na Git. npm publikuje wszystko, co jest w twoim katalogu.
— John Chadwick,

13
Dla każdego, kto natknie się na to później ... Na przykład npm5, npm uruchomi dowolny prepareskrypt dla samych „instalacji”, w tym git deps. Co oznacza, że ​​powyższe komentarze dotyczące kompilacji i folderów dist są nieaktualne. Każdy pakiet, który poprawnie ustawia swoją kompilację do uruchomienia, preparebędzie działał dobrze jako git dep bez wprowadzania żadnych skompilowanych zasobów do git.
— jasonkarns,


37

Obecna najwyższa odpowiedź Petera Lyonsa nie ma znaczenia w najnowszych wersjach NPM. Na przykład użycie tego samego polecenia, które było krytykowane w tej odpowiedzi, jest teraz w porządku.

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

Jeśli nadal występują problemy, może to być problem z dowolnym pakietem, którego używasz.


Przekierowuje również automatycznie do github.com/expressjs/express teraz, gdy użyjesz tego polecenia :)
— Colin D

33

Metody są teraz dość dobrze omówione w dokumentacji instalacyjnej npm, a także w wielu innych odpowiedziach tutaj.

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

Jednak coś, co ostatnio się zmieniło, to npm dodanie prepareskryptu w celu zastąpienia prepublishskryptu. Rozwiązuje to długotrwały problem polegający na tym, że moduły zainstalowane przez git nie uruchomiły prepublishskryptu, a tym samym nie zakończyły kroków kompilacji, które występują, gdy moduł jest publikowany w rejestrze npm. Zobacz https://github.com/npm/npm/issues/3055 .

Oczywiście autorzy modułu będą musieli zaktualizować pakiet package.json, aby użyć nowej preparedyrektywy, aby to zaczęło działać.


19

AKTUALIZACJA teraz możesz zrobić: npm install git://github.com/foo/bar.git
lub w package.json:

"dependencies": {
  "bar": "git://github.com/foo/bar.git"
}

19

Ogólna postać składni to

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

co oznacza, że ​​tak będzie w twoim przypadku

npm install git+ssh://git@github.com/visionmedia/express.git

Z dokumentów npmjs:

instalacja npm:

Instaluje pakiet od hostowanego dostawcy git, klonując go za pomocą git. W przypadku pełnego zdalnego adresu URL git zostanie podjęta próba tylko tego adresu URL.

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

| #semver:] to jeden z plików git, git + ssh, git + http, git + https lub git +.

Jeśli podano #, zostanie ono użyte do sklonowania dokładnie tego zatwierdzenia. Jeśli zatwierdzenie ma format #semver :, może to być dowolny prawidłowy zakres semver lub dokładna wersja, a npm będzie szukał jakichkolwiek znaczników lub referencji pasujących do tego zakresu w zdalnym repozytorium, podobnie jak w przypadku zależności rejestru. Jeśli ani # lub

semver: jest określony, następnie używany jest master.

Jeśli repozytorium korzysta z podmodułów, te podmoduły również zostaną sklonowane.

Jeśli instalowany pakiet zawiera skrypt przygotowawczy, jego zależności i devDependencies zostaną zainstalowane, a skrypt przygotowawczy zostanie uruchomiony, zanim pakiet zostanie spakowany i zainstalowany.

Następujące zmienne środowiskowe git są rozpoznawane przez npm i zostaną dodane do środowiska podczas uruchamiania git:

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

Szczegółowe informacje można znaleźć na stronie man git.

Przykłady:

npm install git+ssh://git@github.com:npm/npm.git#v1.0.27
npm install git+ssh://git@github.com:npm/npm#semver:^5.0
npm install git+https://isaacs@github.com/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://git@github.com:npm/npm.git npm install

14

Zainstaluj bezpośrednio:

npm install visionmedia/express

Możesz też dodać "express": "github:visionmedia/express"do "dependencies"sekcji package.jsonpliku, a następnie uruchomić:

npm install

9

Ty też możesz to zrobić

npm i alex-cory/fasthacks

lub

npm i github:alex-cory/fasthacks

Gruntownie:

npm i user_or_org/repo_name

6

Możesz bezpośrednio zainstalować repozytorium github, wydając npm installpolecenie: npm install https://github.com/futurechallenger/npm_git_install.git --save

UWAGA: W repozytorium, które zostanie zainstalowane za pomocą polecenia npm:

  1. może musisz mieć dyst folder w repo, zgodnie z komentarzem @Dan Dascalescu.
  2. Zdecydowanie musisz mieć w pakiecie pakiet.json! które zapomniałem dodać.

1
W distrepozytorium nie potrzebujesz folderu ani żadnego kodu kompilacji. Musisz tylko użyć prepareskryptu w package.json.
— Cameron Tacklind

4

Prosty :

npm install *GithubUrl*.git --save

przykład:

npm install https://github.com/visionmedia/express.git --save

0

próbowałem npm install git+https://github.com/visionmedia/express ale trwało to zbyt długo i nie byłem pewien, czy to zadziała.

Dla mnie zadziałało - yarn add git+https://github.com/visionmedia/express.


-3

Wypróbuj to polecenie

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

to polecenie działało dla mnie.

 npm install github:BlessCSS/bless#3.x -g

12
NIE UŻYWAJ SUDO Z INSTALACJĄ NPM! raczej użyj chown, aby zmienić właściciela.
— Marek Fajkus,

Wersja to nazwa znacznika / gałęzi lub wersja package.json?
— mfrachet

@MarekFajkus, jeśli instalujesz w systemie Linux za pomocą menedżera pakietów używającego sudo ... musisz użyć roota, jeśli chcesz instalować pakiety globalnie
— Ray Foss

1
@RayFoss Rok spóźniony, ale ... tylko wtedy, gdy chcesz, aby globalnie zainstalowany pakiet był dostępny dla wszystkich użytkowników, co rzadko się zdarza. Wystarczy skonfigurować npm, aby zainstalować pakiety globalne ~/node_modules, a wtedy nigdy nie potrzebujesz sudo.
— Mr5o1,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.