Bergantung pada cabang atau tag menggunakan URL git di package.json?

399

Katakanlah saya sudah bercabang modul simpul dengan perbaikan bug dan saya ingin menggunakan versi tetap saya, pada cabang fitur tentu saja, sampai perbaikan bug digabungkan dan dirilis.

Bagaimana saya merujuk versi tetap saya di versi dependenciessaya package.json?

hurrymaplelad
sumber

Jawaban:

569

Dari dokumen npm :

git://github.com/<user>/<project>.git#<branch>

git://github.com/<user>/<project>.git#feature\/<branch>

Pada NPM versi 1.1.65, Anda dapat melakukan ini:

<user>/<project>#<branch>
hurrymaplelad
sumber
130
Pada npm 1.1.65, URL Github bisa lebih ringkas user/project. npmjs.org/doc/files/package.json.html Anda dapat melampirkan cabang sepertiuser/project#branch
dantheta
2
git://github.com/<user>/<project>.git#feature/blahbekerja tetapi <user>/<project>.git#feature/blahtidak ... mungkin regex mereka perlu lebih maju untuk feature/blahdiperhitungkan. Ini npmv1.4.28
pulkitsinghal
5
Bagaimana Anda memasukkan nomor versi?
Richard
1
@urrymaplelad dapatkah saya melakukan hal yang sama untuk permintaan tarik? Jika demikian, bagaimana perintahnya?
roundrobin
3
Diperbarui NPM docs tautan docs.npmjs.com/files/package.json#github-urls
kellen
136

komentar per @ dantheta:

Pada npm 1.1.65, URL Github dapat menjadi pengguna / proyek yang lebih ringkas. npmjs.org/doc/files/package.json.html Anda dapat melampirkan cabang seperti cabang pengguna / proyek #

Begitu

"babel-eslint": "babel/babel-eslint",

Atau untuk tag v1.12.0 pada jscs:

"jscs": "jscs-dev/node-jscs#v1.12.0",

Catatan, jika Anda menggunakan npm --save, Anda akan mendapatkan git yang lebih panjang

Dari 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.

URL GitHub

Pada versi 1.1.65, Anda dapat merujuk ke url GitHub hanya sebagai "foo": "user / foo-project". Sama seperti dengan URL git, sufiks komit-ish dapat dimasukkan. Sebagai contoh:

{"name": "foo",
"versi": "0.0.0",
"dependencies": {"express": "visionmedia / express", "mocha": "visionmedia / mocha # 4727d357ea"}}

justingordon
sumber
2
Tergantung pada komitmen, sha1 harus menjadi pilihan yang lebih disukai, terutama jika Anda bergantung pada repo yang tidak di bawah kendali Anda. Cabang dan tag Git tidak dapat diubah (dapat dihapus / diubah, berbahaya / tidak sengaja), sementara (hampir) tidak mungkin untuk membuat tabrakan sha1.
jakub.g
1
dapatkah saya memiliki cabang DAN komit untuk komitmen?
Kursi makan munching
45

Jika Anda ingin menggunakan develatau featurebercabang, atau Anda belum menerbitkan paket tertentu ke registri NPM, atau Anda tidak bisa karena itu adalah modul pribadi, maka Anda dapat mengarahkan ke git://URI alih-alih nomor versi di package.json:

"dependencies": {
   "public": "git://github.com/user/repo.git#ref",
   "private": "git+ssh://[email protected]:user/repo.git#ref"
}

The #refporsi opsional, dan dapat menjadi cabang (seperti master), tag (seperti 0.0.1) atau parsial atau penuh komit id.

Fizer Khan
sumber
26

Pada NPM versi terbaru, Anda bisa melakukan:

npm install gitAuthor/gitRepo#tag

Jika repo adalah paket NPM yang valid, itu akan secara otomatis di-alias di package.json sebagai:

{ "NPMPackageName": "gitAuthor/gitRepo#tag" }

Jika Anda bisa menambahkan ini ke jawaban @justingordon, tidak perlu lagi menggunakan aliasing manual!

pusaran
sumber
4
tidak, tidak. Menginstal salah. Entah bagaimana itu tidak termasuk struktur direktori keseluruhan dari repositori, hanya beberapa file seperti package.json, yarn.lock, readme dan lisensi. Tidak ada folder src atau dist.
StalkAlex
@StalkAlex docs.npmjs.com/cli/publish dan kemudian periksa repo yang Anda instal untuk skrip build. Mungkin mereka di-tag atau post-install tidak berfungsi untuk Anda, ini masalah untuk paket spesifik itu semoga membantu!
vortex
@vortex terima kasih, apa maksud Anda tepatnya dengan memberi tag? Bagaimana ini membuat masalah seperti itu?
StalkAlex
0

Jika itu membantu siapa pun, saya mencoba semuanya di atas (https w / mode token) - dan masih tidak ada yang berhasil. Saya tidak mendapatkan kesalahan, tetapi tidak ada yang diinstal di node_modules atau package_lock.json. Jika saya mengubah token atau huruf apa pun dalam nama repo atau nama pengguna, dll. - Saya akan mendapatkan kesalahan. Jadi saya tahu saya memiliki token dan nama repo yang tepat.

Saya akhirnya menyadari itu karena nama dependensi yang saya miliki di paket saya. Johnny tidak cocok dengan nama dalam paket. Johnny repo yang saya coba tarik. Bahkan npm menginstal --verbose tidak mengatakan ada masalah. Sepertinya mengabaikan dependensi tanpa kesalahan.

Mat
sumber