npm instal repositori github pribadi dengan dependensi di package.json


210

Saya mencoba menginstal repositori pribadi github oleh npm yang menyertakan repositori github pribadi lainnya sebagai dependensi.

Telah mencoba banyak cara dan posting tetapi tidak ada yang berfungsi. Inilah yang saya lakukan:

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

di package.json seperti:

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

Apa cara yang tepat untuk melakukannya?


4
git + https: // <token-from-github>: x-oauth-basic@github.com/ <user> / <GitRepo> .git Mendukung otentikasi dan berfungsi dengan baik dalam semua kasus.
vashishatashu

Jawaban:


147

Coba ini:

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

Anda juga dapat mencoba ini, di mana visionmedia / express adalah nama / repo:

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

Atau (jika modul paket npm ada):

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

Diambil dari NPM docs


1
npm ERR! Gagal menyelesaikan git HEAD ( github.com/user/reponame.git ) fatal: argumen ambigu 'commit-ish': revisi yang tidak diketahui atau jalur yang tidak ada di pohon kerja.
vashishatashu

Tidak bekerja #xxxx tidak diperlukan seolah-olah tidak dianggap sebagai master dan semua pekerjaan saya adalah master. Ada ide lain?
vashishatashu

Hasil yang sama jika Anda menghapus tajuk (# commit-ish)?
leko

Apa nama repositori Anda?
leko

28
@vashishatashu, mengenai fatal: ambiguous argument 'commit-ish': unknown revision or path not in the working tree.Pretty jelas itu commit-ishhanya contoh kata yang harus Anda ganti dengan shakomit spesifik yang Anda butuhkan. (atau hapus itu #commit-ishsama sekali jika Anda memerlukan komit terbaru di cabang master Anda)
meandre

92

Berikut ini berfungsi dengan baik di semua skenario yang saya butuhkan:

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

2
Apakah Anda memiliki tautan referensi untuk solusi ini?
Ian

3
@Ian: Saya membacanya di suatu tempat tetapi tidak memiliki tautan referensi. Saya menggunakannya dalam produksi selama lebih dari setahun tanpa masalah. Anda bisa mendapatkan token otomatis dari Github sebagai: Pengaturan -> Aplikasi -> Token Akses Pribadi -> Buat token baru. Token ini dapat memiliki hak baca / tulis atau keduanya sesuai kasus penggunaan Anda.
vashishatashu

6
@lan: untuk bitbucket Anda dapat menggunakan sintaks berikut: git clone https: // <bitbucket-team-token>: x-oauth-basic@bitbucket.org/ <team> / <BitRepo> <bitbucket-team-token> can diperoleh dari: Tim -> Kelola Tim -> Kunci API
vashishatashu

@vashishatashu, terima kasih atas ide bagusnya. Namun, saya mendapatkan "fatal: blahblah tidak ditemukan" ketika mencoba ini, meskipun saya telah memberikan akses kepada pengguna yang bersangkutan untuk repo. Ada ide?
Per Lundberg

2
Inilah artikel yang bagus tentang teknik ini: rzrsharp.net/2013/07/02/...
cyberwombat

75

Bagi Anda yang datang ke sini untuk direktori publik, dari npm docs: https://docs.npmjs.com/files/package.json#git-urls-as-dependencies

Git URL sebagai Dependensi

URL git dapat berupa:

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

Commit-ish dapat berupa tag, sha, atau cabang yang dapat diberikan sebagai argumen untuk checkout. Standarnya adalah master.


1
Apa artinya "untuk direktori publik"?
Dan Dascalescu

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

Apa artinya protokol git+https://? Gunakan gitprotokol untuk kloning dan menarik perubahan baru sambil mendorong https?
tonix

60

Jawaban yang diterima berfungsi, tetapi saya tidak suka banyak ide untuk menempelkan token aman ke dalam package.json

Saya telah menemukannya di tempat lain, jalankan saja perintah satu kali ini seperti yang didokumentasikan di halaman git-config .

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

GITHUB_TOKEN dapat diset sebagai variabel environment atau disisipkan secara langsung

dan kemudian saya menginstal repositori github pribadi seperti: npm install user/repo --save


berfungsi juga di Heroku, cukup atur git config ...perintah di atas sebagai heroku-prebuildskrip package.jsondan setup GITHUB_TOKENsebagai variabel konfigurasi Heroku.


Ini juga berfungsi di Microsoft Visual Studio Layanan Tim Membangun Rantai, di mana saya menjalankannya sebagai "perintah" sebelum npm installlangkah.
Lukx

2
Spektakuler! Solusi hebat untuk lingkungan CI! Saya memang harus memodifikasinya sedikit; Saya harus mengubah akhir...insteadOf ssh://git@github.com
Scott Rippey

2
Ini sepertinya tidak mempengaruhi npm saya. Masih menggunakan ssh saat menjalankan npm install user/repo --save. Apakah ada sesuatu yang perlu saya konfigurasi?
Marco Prins

1
Solusi luar biasa untuk lingkungan CI di mana pengaturan SSH sangat merepotkan (CloudBuild)! Terima kasih banyak untuk yang ini!
Mathieu Bour

43

Ada beberapa cara untuk melakukannya seperti yang ditunjukkan orang, tetapi versi yang paling singkat adalah:

// 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"

misalnya

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

3
Ini jawaban terbaik! <3 Langsung ke titik dan bahkan menunjukkan contoh kasus yang berbeda.
Renato Carvalho

Jawaban singkat untuk repositori publik, yang sayangnya bukan pertanyaan OP. Tetap saja, itu membantu saya dan saya menghargainya.
runderworld

Saya memperbarui jawaban saya untuk memasukkan kasus repo pribadi
Adrian


7

Karena Git menggunakan di curlbawah tenda, Anda dapat menggunakan ~/.netrcfile dengan kredensial. Untuk GitHub akan terlihat seperti ini:

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

Jika Anda memilih untuk menggunakan access tokens, itu dapat dihasilkan dari:

Pengaturan -> Pengaturan pengembang -> Token akses pribadi

Ini juga akan berfungsi jika Anda menggunakan Github Enterprise di perusahaan Anda sendiri. cukup letakkan url github perusahaan Anda di machinebidang.


bekerja untuk saya dengan machine github.com login <token>satu jalur dan "package": "https://github.com/acme/privaterepo.git#commit-ish"atau langsung dengannpm install https://github.com/acme/privaterepo.git#commit-ish
abernier

4

Berikut ini adalah versi yang lebih rinci tentang cara menggunakan token Github tanpa mempublikasikan dalam package.jsonfile.

  1. Buat token akses github pribadi
  2. Siapkan url menulis ulang di ~ / .gitconfig
git config --global url."https://<TOKEN HERE>:x-oauth-basic@github.com/".insteadOf https://x-oauth-basic@github.com/
  1. Instal repositori pribadi. Tingkat log verbal untuk kesalahan akses debugging.
npm install --loglevel verbose --save git+https://x-oauth-basic@github.com/<USERNAME HERE>/<REPOSITORY HERE>.git#v0.1.27

Jika akses ke Github gagal, coba jalankan git ls-remote ...perintah yangnpm install will print


0

Untuk referensi repositori pribadi saya, saya tidak ingin menyertakan token yang aman, dan tidak ada yang sederhana (yaitu hanya menentukan dalam package.json) yang berfungsi. Inilah yang berhasil:

  1. Pergi ke GitHub.com
  2. Menavigasi ke Gudang Pribadi
  3. Mengklik "Kloning atau Unduh" dan URL yang Disalin (yang tidak cocok dengan contoh di atas)
  4. Menambahkan # commit-sha
  5. Jalankan npm install

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.