npm instaluje prywatne repozytoria github według zależności w package.json

210

Próbuję zainstalować prywatne repozytorium github przez npm, które zawiera inne prywatne repozytoria github jako zależność.

Próbowałem wiele sposobów i postów, ale żaden nie działa. Oto co robię:

npm install git+https://github.com/myusername/mygitrepository.git

w package.json jest jak:

"dependencies": {
    "repository1name": "git+https://github.com/myusername/repository1.git",
    "repository2name": "git+https://github.com/myusername/repository2.git"
}

Jaki jest właściwy sposób to zrobić?

vashishatashu
źródło
4
git + https: // <token-from-github>: [email protected]/ <user> / <GitRepo> .git Obsługuje uwierzytelnianie i działa dobrze we wszystkich przypadkach.
vashishatashu

Odpowiedzi:

147

Spróbuj tego:

"dependencies" : {
  "name1" : "git://github.com/user/project.git#commit-ish",
  "name2" : "git://github.com/user/project.git#commit-ish"
}

Możesz także spróbować tego, gdzie visionmedia / express to name / repo:

"dependencies" : {
   "express" : "visionmedia/express"
}

Lub (jeśli istnieje moduł pakietu npm):

"dependencies" : {
  "name": "*"
}

Zaczerpnięte z dokumentów NPM

leko
źródło
1
npm ERR! Rozwiązywanie git HEAD ( github.com/user/reponame.git ) nie powiodło się : krytyczny: dwuznaczny argument „commit-ish”: nieznana wersja lub ścieżka nie działa w drzewie roboczym.
vashishatashu
Nie działa #xxxx nie jest wymagany, ponieważ nie jest uważany za master, a cała moja praca jest master. Jakiś inny pomysł?
vashishatashu
Ten sam wynik, jeśli usuniesz nagłówek (# commit-ish)?
leko
Jak nazywa się twoje repozytorium?
leko
28
@vashishatashu, dotyczące fatal: ambiguous argument 'commit-ish': unknown revision or path not in the working tree.dość oczywistego, że commit-ishto tylko przykładowe słowo, które należy zastąpić shakonkretnym zatwierdzeniem, którego potrzebujesz. (lub usuń to #commit-ishw ogóle, jeśli potrzebujesz najnowszego zatwierdzenia w gałęzi master)
meandre
91

Poniższe działało dobrze we wszystkich potrzebnych scenariuszach:

"dependencies": {
"GitRepo": "git+https://<token-from-github>:[email protected]/<user>/<GitRepo>.git"
}
vashishatashu
źródło
1
Czy masz link referencyjny do tego rozwiązania?
Ian
3
@Ian: Gdzieś to przeczytałem, ale nie mam linku referencyjnego. Używam go w produkcji od ponad roku bez żadnego problemu. Możesz uzyskać oauth token z Github jako: Ustawienia -> Aplikacje -> Osobisty token dostępu -> Wygeneruj nowy token. Ten token może mieć uprawnienia do odczytu / zapisu lub oba, zgodnie z przypadkiem użycia.
vashishatashu
6
@lan: dla bitbucket możesz użyć następującej składni: git clone https: // <bitbucket-team-token>: [email protected]/ <team> / <BitRepo> <bitbucket-team-token> może można uzyskać od: Zespół -> Zarządzaj zespołem -> Klucz API
vashishatashu
@vashishatashu, dzięki za świetny pomysł. Jednak podczas próby tego pojawia się komunikat „Fatal: blahblah not found”, mimo że przyznałem dostęp do danego użytkownika repozytorium. Jakieś pomysły?
Per Lundberg,
2
Oto artykuł miły w tej technice: rzrsharp.net/2013/07/02/...
cyberwombat
75

Dla tych z was, którzy przybyli tutaj po katalogi publiczne, z dokumentów npm: https://docs.npmjs.com/files/package.json#git-urls-as-dependencies

Adresy URL Git jako zależności

Adresy URL Git mogą mieć postać:

git://github.com/user/project.git#commit-ish
git+ssh://user@hostname:project.git#commit-ish
git+ssh://user@hostname/project.git#commit-ish
git+http://user@hostname/project/blah.git#commit-ish
git+https://user@hostname/project/blah.git#commit-ish

Zatwierdzenie może być dowolnym znacznikiem, sha lub gałęzią, które można podać jako argument do pobrania z git. Domyślnie jest to master.

Mummybot
źródło
1
Co oznacza „dla katalogów publicznych”?
Dan Dascalescu,
1
As of version 1.1.65, you can refer to GitHub urls as just “foo”: “user/foo-project”. dokumentacja npmjs docs
Aleksandar
Co oznacza protokół git+https://? Używać gitprotokołu do klonowania i wyciągać nowe zmiany podczas przepychania https?
tonix
60

Akceptowana odpowiedź działa, ale nie podoba mi się pomysł wklejenia bezpiecznych tokenów do pliku package.json

Znalazłem go gdzie indziej, po prostu uruchom to jednorazowe polecenie, jak udokumentowano na stronie man git-config .

git config --global url."https://${GITHUB_TOKEN}@github.com/".insteadOf git@github.com:

GITHUB_TOKEN można skonfigurować jako zmienną środowiskową lub wkleić bezpośrednio

a następnie instaluję prywatne repozytoria github, takie jak: npm install user/repo --save


działa również w Heroku, wystarczy ustawić powyższe git config ...polecenie jako heroku-prebuildskrypt w package.jsoni skonfigurować GITHUB_TOKENjako zmienną konfiguracyjną Heroku.

Michał Moravcik
źródło
Działa to również w łańcuchu kompilacji Microsoft Visual Studio Team Services, gdzie wykonuję go jako „polecenie” tuż przed npm installkrokiem.
Lukx
2
Spektakularny! Świetne rozwiązanie dla środowisk CI! Musiałem go trochę zmodyfikować; Musiałem zmienić koniec na...insteadOf ssh://[email protected]
Scott Rippey
2
To nie wydaje się mieć wpływu na mój NPM. Nadal używa ssh podczas działania npm install user/repo --save. Czy muszę coś skonfigurować?
Marco Prins
1
Doskonałe rozwiązanie dla środowiska CI, w którym konfiguracja SSH jest uciążliwa (CloudBuild)! Dziękuję bardzo za ten!
Mathieu Bour
43

Ludzie zwracają uwagę na wiele sposobów, ale najkrótsze wersje to:

// from master
"depName": "user/repo",

// specific branch
"depName": "user/repo#branch",

// specific commit
"depName": "user/repo#commit",

// private repo
"depName": "git+https://[TOKEN]:[email protected]/user/repo.git"

na przykład

"dependencies" : {
  "hexo-renderer-marked": "amejiarosario/dsa.jsd#book",
  "hexo-renderer-marked": "amejiarosario/dsa.js#8ea61ce",
  "hexo-renderer-marked": "amejiarosario/dsa.js",
}
Adrian
źródło
3
To najlepsza odpowiedź! <3 Od razu do rzeczy, a nawet pokaż przykłady różnych przypadków.
Renato Carvalho,
Zwięzła odpowiedź dla publicznych repozytoriów, co niestety nie było pytaniem PO. Mimo to pomogło mi to i doceniam to.
runderworld
Zaktualizowałem swoją odpowiedź, aby uwzględnić sprawę prywatnego repo
Adrian
29
"dependencies": {
  "some-package": "github:github_username/some-package"
}

Lub tylko

"dependencies": {
  "some-package": "github_username/some-package"
}

https://docs.npmjs.com/files/package.json#github-urls

Rayron Victor
źródło
Działa idealnie i jest najbardziej zwięzły. Miał błędy z innych rozwiązań. Dzięki!
Ryall
7

Ponieważ Git używa curlpod maską, możesz używać ~/.netrcpliku z poświadczeniami. W przypadku GitHub wyglądałoby to mniej więcej tak:

machine github.com
  login <github username>
  password <password OR github access token>

Jeśli zdecydujesz się użyć access tokens, możesz go wygenerować z:

Ustawienia -> Ustawienia programisty -> Osobiste tokeny dostępu

Powinno to również działać, jeśli korzystasz z Github Enterprise we własnej korporacji. wystarczy wpisać adres URL github przedsiębiorstwa w machinepolu.

LeOn - Han Li
źródło
pracował dla mnie z machine github.com login <token>jedną linią i "package": "https://github.com/acme/privaterepo.git#commit-ish"lub bezpośrednio znpm install https://github.com/acme/privaterepo.git#commit-ish
abernier
4

Oto bardziej szczegółowa wersja korzystania z tokena Github bez publikowania w package.jsonpliku.

  1. Utwórz osobisty token dostępu do github
  2. Skonfiguruj przepisanie adresu URL w ~ / .gitconfig
git config --global url."https://<TOKEN HERE>:[email protected]/".insteadOf https://[email protected]/
  1. Zainstaluj prywatne repozytorium. Pełny poziom dziennika do debugowania błędów dostępu.
npm install --loglevel verbose --save git+https://[email protected]/<USERNAME HERE>/<REPOSITORY HERE>.git#v0.1.27

W przypadku awarii dostępu do Github spróbuj uruchomić git ls-remote ...polecenie, którenpm install will print

Martins Balodis
źródło
0

W odniesieniu do mojego prywatnego repozytorium nie chciałem dołączać bezpiecznego tokena i żadne inne proste (tj. Określanie tylko w pakiecie.json) nie działało. Oto, co zadziałało:

  1. Udałem się na GitHub.com
  2. Nawigowane do prywatnego repozytorium
  3. Kliknij „Sklonuj lub pobierz” i skopiowany adres URL (który nie pasuje do powyższych przykładów)
  4. Dodano # commit-sha
  5. Ran npm install
The Coder
źródło