npm package.json içindeki bağımlılığa göre özel github depolarını yükleyin


210

Bağımlılık olarak diğer özel github depoları içeren npm tarafından github özel depo yüklemeye çalışıyorum.

Birçok yol ve yazı denedim ama hiçbiri çalışmıyor. İşte yaptığım şey:

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

package.json şöyle:

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

Bunu yapmanın doğru yolu nedir?


4
git + https: // <token-from-github>: x-oauth-basic@github.com/ <user> / <GitRepo> .git Kimlik doğrulamayı destekler ve her durumda iyi çalışır.
vashishatashu

Yanıtlar:


147

Bunu dene:

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

Ayrıca, visionmedia / express'in isim / repo olduğu yerde de deneyebilirsiniz:

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

Veya (npm paket modülü varsa):

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

Alındığı NPM docs


1
npm ERR! Git HEAD ( github.com/user/reponame.git ) fatal: belirsiz ' arg -ish' argümanı: çalışma ağacında olmayan bilinmeyen düzeltme veya yol çözülemedi.
vashishatashu

Çalışmıyor. #xxxx, master olduğu düşünülmüyormuş gibi gerekli değildir ve tüm işlerim master'tadır. Başka bir fikrin var mı?
vashishatashu

Üstbilgiyi kaldırırsanız aynı sonuç (# commit-ish)?
leko

Deponuzun adı nedir?
leko

28
@vashishatashu, ilgili fatal: ambiguous argument 'commit-ish': unknown revision or path not in the working tree.olduğu Oldukça bariz commit-ishbir koymanız gerekir sadece örnek bir kelimedir shabir seçici ihtiyacınız olduğunu taahhüt. (veya #commit-ishana
dalınızdaki

91

Aşağıdaki gerekli tüm senaryolarda iyi çalıştı:

"dependencies": {
"GitRepo": "git+https://<token-from-github>:x-oauth-basic@github.com/<user>/<GitRepo>.git"
}

1
Bu çözüm için bir referans bağlantınız var mı?
Ian

3
@Ian: Bir yerde okudum ama referans bağlantım yok. Üretimde bir yılı aşkın süredir sorunsuz bir şekilde kullanıyorum. Oauth jetonunu Github'dan şu şekilde alabilirsiniz: Ayarlar -> Uygulamalar -> Kişisel Erişim Simgesi -> Yeni jeton oluştur. Bu simge, kullanım durumunuza göre okuma / yazma veya her iki ayrıcalığa sahip olabilir.
vashishatashu

6
@lan: bitbucket için aşağıdaki sözdizimini kullanabilirsiniz: git clone https: // <bitbucket-team-token>: x-oauth-basic@bitbucket.org/ <team> / <BitRepo> <bitbucket-team-token>
Edinilebilir

@ vashishatashu, harika bir fikir için teşekkürler. Ancak, repo söz konusu kullanıcıya erişim izni vermiş olsa bile, bunu denerken "ölümcül: blahblah bulunamadı" alıyorum. Herhangi bir fikir?
Per Lundberg

2
İşte bu teknikle ilgili güzel bir makale: rzrsharp.net/2013/07/02/…
cyberwombat

75

Herkese açık dizinler için buraya gelenleriniz için, npm dokümanlarından: https://docs.npmjs.com/files/package.json#git-urls-as-dependencies

Bağımlılık Olarak URL'leri Git

Git URL'leri şu biçimde olabilir:

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

Taahhüt, git çıkışına argüman olarak verilebilen herhangi bir etiket, sha veya şube olabilir. Varsayılan master'dır.


1
"Genel dizinler için" ne demektir?
Dan Dascalescu

1
As of version 1.1.65, you can refer to GitHub urls as just “foo”: “user/foo-project”. npmjs docs referansı
Aleksandar

Protokol ne anlama git+https://geliyor? gitKlonlama için protokolü kullanın ve iterken yeni değişiklikleri çekin https?
tonix

60

Kabul edilen cevap işe yarıyor, ancak güvenli jetonları package.json

Başka bir yerde buldum, sadece git-config man sayfasında belgelendiği gibi bu bir kerelik komutu çalıştırın .

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

GITHUB_TOKEN çevre değişkeni olarak kurulabilir veya doğrudan yapıştırılabilir

ve sonra ben gibi özel github depoları yüklemek: npm install user/repo --save


Heroku'da da çalışır, yukarıdaki git config ...komutu komut heroku-prebuilddosyası olarak package.jsonve GITHUB_TOKENHeroku yapılandırma değişkeni olarak ayarlayın.


Bu, npm installadımdan hemen önce bir "komut" olarak yürüttüğüm Microsoft Visual Studio Team Services Yapı Zinciri'nde de çalışır .
Lukx

2
Muhteşem! CI ortamları için mükemmel çözüm! Biraz değiştirmek zorunda kaldım; ...insteadOf ssh://git@github.com
Sonunu

2
Bu benim npm etkilemez gibi görünüyor. Çalışırken hala ssh kullanıyor npm install user/repo --save. Yapılandırmam gereken bir şey var mı?
Marco Prins

1
SSH kurulumunun bir acı olduğu CI ortamı için mükemmel çözüm (CloudBuild)! Bunun için çok teşekkür ederim!
Mathieu Bour

43

İnsanların işaret ettiği gibi bunu yapmanın birden çok yolu vardır, ancak en kısa sürümler şunlardır:

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

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

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

// private repo
"depName": "git+https://[TOKEN]:x-oauth-basic@github.com/user/repo.git"

Örneğin

"dependencies" : {
  "hexo-renderer-marked": "amejiarosario/dsa.jsd#book",
  "hexo-renderer-marked": "amejiarosario/dsa.js#8ea61ce",
  "hexo-renderer-marked": "amejiarosario/dsa.js",
}

3
Bu en iyi cevap! <3 Doğrudan doğruya ve hatta farklı durumların örneklerini gösterir.
Renato Carvalho

Maalesef OP'nin sorusu olmayan kamu depoları için özlü cevap. Yine de bana yardımcı oldu ve takdir ettim.
runderworld

Cevabımı özel repo davasını içerecek şekilde güncelledim
Adrian


7

Git curlkaputun altında kullandığından ~/.netrc, kimlik bilgilerine sahip dosyayı kullanabilirsiniz . GitHub için şöyle görünecektir:

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

Kullanmayı seçerseniz access tokens, şunlardan oluşturulabilir:

Ayarlar -> Geliştirici ayarları -> Kişisel erişim belirteçleri

Bu, kendi şirketinizde Github Enterprise kullanıyorsanız da işe yarar. sadece kurumsal github url machinealanını koyun .


benim machine github.com login <token>için bir hatta ve "package": "https://github.com/acme/privaterepo.git#commit-ish"doğrudan ile çalıştınpm install https://github.com/acme/privaterepo.git#commit-ish
abernier

4

Github belirtecini package.jsondosyada yayınlamadan nasıl kullanacağınızın daha ayrıntılı bir sürümü .

  1. Kişisel github erişim belirteci oluşturma
  2. ~ / .Gitconfig içinde url yeniden yazma ayarlarını yapma
git config --global url."https://<TOKEN HERE>:x-oauth-basic@github.com/".insteadOf https://x-oauth-basic@github.com/
  1. Özel depoyu yükleyin. Erişim hatalarının ayıklanması için ayrıntılı günlük düzeyi.
npm install --loglevel verbose --save git+https://x-oauth-basic@github.com/<USERNAME HERE>/<REPOSITORY HERE>.git#v0.1.27

Github'a erişimin başarısız olması durumunda git ls-remote ...,npm install will print


0

Özel depo referansım için güvenli bir simge eklemek istemedim ve diğer basitlerin hiçbiri (yani yalnızca package.json'da belirtmek) işe yaramadı. İşte işe yarayan:

  1. GitHub.com'a gittim
  2. Özel Depoya Gitti
  3. "Klonla veya İndir" ve Kopyalanan URL (yukarıdaki örneklerle eşleşmedi) tıklandı
  4. # Commit-sha eklendi
  5. Koştu npm kurulumu

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.