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?

vashishatashu
sumber
4
git + https: // <token-from-github>: [email protected]/ <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

leko
sumber
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>:[email protected]/<user>/<GitRepo>.git"
}
vashishatashu
sumber
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>: [email protected]/ <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.

mummybot
sumber
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.

Michal Moravcik
sumber
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://[email protected]
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]:[email protected]/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",
}
Adrian
sumber
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
29
"dependencies": {
  "some-package": "github:github_username/some-package"
}

atau hanya

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

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

Rayron Victor
sumber
Bekerja dengan sempurna dan paling ringkas. Mengalami kesalahan dari solusi lain. Terima kasih!
Ryall
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.

LeOn - Han Li
sumber
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>:[email protected]/".insteadOf https://[email protected]/
  1. Instal repositori pribadi. Tingkat log verbal untuk kesalahan akses debugging.
npm install --loglevel verbose --save git+https://[email protected]/<USERNAME HERE>/<REPOSITORY HERE>.git#v0.1.27

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

Martins Balodis
sumber
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
Sang Coder
sumber