Bower memungkinkan saya untuk menentukan persyaratan versi untuk paket menggunakan sintaks berikut:
"dependencies": {
"<name>": "<version>",
},
Tetapi saya belum dapat menemukan apa sintaks yang digunakan untuk <version>
. Saya tahu bahwa saya dapat menentukan versi yang akan:
- lebih besar dari versi tertentu dengan
">1.0.0"
- lebih besar atau sama dengan versi:
">=1.0.0"
- atau dalam beberapa rentang:
"1.0.0 - 2.0.0"
.
Saya juga tahu bahwa ada sintaks versi umum yang mengandung tilde: "~1.0.0"
. Tetapi saya tidak yakin apa artinya dan apakah itu sama dengan "=1.0.0"
.
Saya juga tertarik untuk mengetahui apakah saya dapat menentukan beberapa versi yang tidak berurutan, seperti 1.0.3
versi tepat plus lebih besar dari 1.5.0
, dll ...
node.js
bower
semantic-versioning
Samuel Hapak
sumber
sumber
Jawaban:
Singkatnya, sintaks untuk nomor versi Bower (dan NPM) disebut SemVer, yang merupakan kependekan dari 'Semantic Versioning'. Anda dapat menemukan dokumentasi untuk sintaksis terperinci dari SemVer seperti yang digunakan dalam Bower dan NPM pada API untuk pengurai semver dalam Node / npm . Anda dapat mempelajari lebih lanjut tentang spesifikasi yang mendasarinya (yang tidak menyebutkan
~
atau detail sintaks lainnya) di semver.org .Ada kalkulator semver visual super berguna yang bisa Anda mainkan, membuat semua ini jauh lebih mudah untuk grok dan diuji.
SemVer bukan hanya sintaks! Ini memiliki beberapa hal yang cukup menarik untuk dikatakan tentang cara-cara yang benar untuk mempublikasikan API, yang akan membantu untuk memahami apa arti sintaksis. Yang terpenting:
Jadi, pertanyaan spesifik Anda
~
terkait dengan skema Major.Minor.Patch. (Seperti halnya operator caret terkait^
.) Anda dapat menggunakan~
untuk mempersempit rentang versi yang bersedia Anda terima:Sebagai contoh: untuk menunjukkan Anda akan mengambil perubahan tingkat tambalan berikutnya pada pohon 1.2.x, dimulai dengan 1.2.0, tetapi kurang dari 1.3.0, Anda dapat menggunakan:
Ini juga memberi Anda hasil yang sama dengan menggunakan
.x
sintaks:Tetapi, Anda dapat menggunakan tilde /
~
sintaks untuk lebih spesifik: jika Anda hanya bersedia menerima perubahan level tambalan mulai dari 1.2.4 , tetapi masih kurang dari 1.3.0, Anda akan menggunakan:Bergerak ke kiri, menuju versi utama , jika Anda menggunakan ...
... sama dengan ...
... dan cocok dengan setiap perubahan tingkat kecil atau tambalan di atas 1.0.0, dan kurang dari 2.0:
Perhatikan bahwa variasi terakhir di atas: ini disebut 'rentang caret' . Tanda sisipan tampak sangat mengerikan
>
, jadi Anda akan dimaafkan karena berpikir itu berarti "versi apa pun yang lebih besar dari 1.0.0". (Aku sudah pasti tergelincir pada itu.) Tidak!Rentang caret pada dasarnya digunakan untuk mengatakan bahwa Anda hanya peduli pada digit paling kiri paling signifikan - biasanya versi utama - dan bahwa Anda akan mengizinkan perubahan minor atau patch-level yang tidak mempengaruhi digit paling kiri itu. Namun, tidak seperti rentang tilde yang menentukan versi utama, rentang caret memungkinkan Anda menentukan titik awal minor / patch yang tepat. Jadi, sementara itu
^1.0.0 === ~1
, rentang tanda sisipan seperti^1.2.3
memungkinkan Anda mengatakan Anda akan melakukan perubahan apa pun>=1.2.3 && <2.0.0
. Anda tidak bisa melakukan itu dengan rentang tilde.Itu semua tampak membingungkan pada awalnya, ketika Anda melihatnya dari dekat. Tapi perkecil keluar sebentar, dan pikirkan seperti ini: tanda sisipan hanya memberi tahu Anda bahwa Anda paling peduli dengan angka signifikan yang tersisa. Tilde memungkinkan Anda mengatakan bahwa Anda paling mengkhawatirkan digit mana yang paling kanan. Sisanya detail.
Ini adalah kekuatan ekspresif dari tilde dan tanda sisipan yang menjelaskan mengapa orang menggunakannya lebih dari
.x
sintaks yang lebih sederhana : mereka hanya membiarkan Anda melakukan lebih banyak. Itu sebabnya Anda akan melihat tilde sering digunakan bahkan di mana.x
akan melayani. Sebagai contoh, lihat npm sendiri: file package.json sendiri menyertakan banyak dependensi dalam~2.4.0
format, daripada2.4.x
format yang bisa digunakan. Dengan berpegang teguh pada~
, sintaks konsisten sepanjang daftar 70+ dependensi versi, terlepas dari mana nomor patch awal dapat diterima.Bagaimanapun, masih ada lagi untuk SemVer, tapi saya tidak akan mencoba untuk merinci semuanya di sini. Lihat di readme dari paket semver node . Dan pastikan untuk menggunakan kalkulator versi semantik saat Anda berlatih dan mencoba memahami cara kerja SemVer.
RE: Nomor Versi Non-Berturutan: Pertanyaan akhir OP tampaknya tentang menentukan nomor / rentang versi non-berturut-turut (jika saya telah mengeditnya secara adil). Ya, Anda bisa melakukan itu, dengan menggunakan common double-pipe "atau" operator:
||
. Seperti itu:sumber
~
secara khusus berarti nomor tambalan (ketiga) mungkin lebih besar dari yang ditentukan, misalnya~1.2.3
setara dengan>=1.2.3 <1.3.0
.'1.1.x' === '>=1.1.0' === '~1.1.0'
,. Kasing 1.1.0 mudah. Tapi notasi-x tidak bisa granular, seperti yang bisa'>=1.1.4'
atau'~1.1.4'
. Jadi, Anda berakhir dengan'1.1.x'
di satu tempat di daftar ketergantungan Anda, dan'~2.7.3'
di tempat lain. Tidak apa-apa, dan berfungsi, tetapi pengembang kemudian perlu mem-parsing beberapa sintaks untuk membaca satu daftar. Dan, jika Anda menulis paket untuk mengatur versi program, Anda ingin satu sintaks. Dan, kebanyakan orang ingin mencegah perubahan yang melanggar. Karenanya, semua masalah diselesaikan dengan~
.Berdasarkan semver , Anda bisa menggunakan
Hyphen Ranges XYZ - ABC
1.2.3-2.3.4
Menunjukkan > = 1.2.3 <= 2.3.4X-Ranges
1.2.x 1.X 1.2.*
Tilde Ranges
~1.2.3 ~1.2
Menunjukkan memungkinkan perubahan tingkat patch atau perubahan versi kecil.Rentang Caret ^ 1.2.3 ^ 0.2.5 ^ 0.0.4
Mengizinkan perubahan yang tidak mengubah digit paling kiri yang bukan nol di tupel [mayor, minor, patch]
^1.2.x
(berarti> = 1.2.0 <2.0.0)^0.0.x
(berarti> = 0,0.0 <0,1.0)^0.0
(berarti> = 0,0.0 <0,1.0)sumber
Bower menggunakan sintaks semver , tetapi berikut adalah beberapa contoh cepat:
Anda dapat menginstal versi tertentu:
Anda dapat menggunakan ~ untuk menentukan 'versi apa pun yang dimulai dengan ini':
Anda dapat menentukan beberapa persyaratan versi secara bersamaan:
sumber
Anda juga dapat menggunakan
latest
kata kunci untuk menginstal versi terbaru yang tersedia:sumber
"*" := >=0.0.0
(Versi memuaskan)" yang dekat tapi agak kabur karena tidak secara khusus mengatakan terbaru sehingga bisa menjadi yang pertama ditemukan?Jika tidak ada nomor tambalan,
~
sama dengan menambahkan.x
ke versi non-tilde. Jika ada nomor tambalan,~
izinkan semua nomor tambalan> = yang ditentukan.Saya tidak punya cukup poin untuk mengomentari jawaban yang diterima, tetapi beberapa informasi tilde bertentangan dengan dokumentasi semver tertaut: tidak
"angular": "~1.2"
akan cocok dengan 1,3, 1.4, 1.4.9. Juga dan yang tidak setara. Ini dapat diverifikasi dengan kalkulator semver npm ."angular": "~1"
"angular": "~1.0"
sumber