Sam*_*pak 273 node.js semantic-versioning bower
Bower使我能够使用以下语法指定包的版本要求:
"dependencies": {
"<name>": "<version>",
},
Run Code Online (Sandbox Code Playgroud)
但我一直无法找到用于该语法的语法<version>.我知道我可以指定版本:
">1.0.0"">=1.0.0""1.0.0 - 2.0.0".我也知道有一个包含代字号的通用版本语法:"~1.0.0".但我不确定它是什么意思,是否与它相同"=1.0.0".
我也有兴趣知道我是否能够指定多个非连续版本,例如完全1.0.3加上大于1.5.0等的版本等...
XML*_*XML 338
简而言之,Bower版本号(和NPM)的语法称为SemVer,它是"语义版本控制"的缩写.您可以在Node/npm中的semver解析器的API上找到Bower和NPM中使用的SemVer详细语法的文档.您可以在semver.org上了解有关基础规范(未提及~或其他语法详细信息)的更多信息.
你可以使用一个超级方便的视觉半频计算器,使所有这些都更容易理解和测试.
SemVer不仅仅是一种语法!关于发布API的正确方法,它有一些非常有趣的事情要说,这将有助于理解语法的含义.最重要的是:
识别出您的公共API后,您可以使用特定的版本号增量来传达对其的更改.考虑XYZ的版本格式(Major.Minor.Patch).错误修复不影响API增加修补程序版本,向后兼容的API添加/更改增加次要版本,向后不兼容的API更改增加主要版本.
因此,您的具体问题~与Major.Minor.Patch架构有关.(与相关的插入符号操作符一样^.)您可以使用~以缩小您愿意接受的版本范围:
例如:表示您将在1.2.x树上进行任何后续补丁级别更改,从1.2.0开始,但小于1.3.0,您可以使用:
"angular": "~1.2"
or:
"angular": "~1.2.0"
Run Code Online (Sandbox Code Playgroud)
这也可以获得与使用.x语法相同的结果:
"angular": "1.2.x"
Run Code Online (Sandbox Code Playgroud)
但是,您可以使用波形符/ ~语法更具体:如果您只愿意接受从1.2.4开始但仍然小于1.3.0的补丁级别更改,您将使用:
"angular": "~1.2.4"
Run Code Online (Sandbox Code Playgroud)
向左移动,朝向主要版本,如果您使用...
"angular": "~1"
Run Code Online (Sandbox Code Playgroud)
......和......一样
"angular": "1.x"
or:
"angular": "^1.0.0"
Run Code Online (Sandbox Code Playgroud)
...并匹配1.0.0以上且小于2.0的任何次要或补丁级别更改:
请注意上面的最后一个变体:它被称为'插入符号范围'.插入符号看起来非常像一个>,所以你可以原谅它认为它意味着"任何版本大于 1.0.0".(我当然不知道了.)不!
插入符号范围基本上用于表示您只关心最左侧的重要数字 - 通常是主要版本 - 并且您将允许任何不影响最左侧数字的次要或补丁级别更改.然而,与指定主要版本的波浪号范围不同,插入符号范围允许您指定精确的次要/补丁起点.所以,虽然^1.0.0 === ~1,像^1.2.3你这样的插入符号让你说你会做任何改变>=1.2.3 && <2.0.0.你不能用波浪范围做到这一点.
当你近距离观察时,这一切似乎都让人感到困惑.但缩小一下,并以这种方式思考:插入符只是让你说你最关心的是最重要的数字是最左边的.代字号让你说你最关心的是哪个数字是最正确的.剩下的就是细节.
这是代字号和插入符号的表现力,它解释了人们使用它们的原因远比简单的.x语法更多:它们只是让你做得更多.这就是为什么你会看到甚至经常使用的波浪号.x.作为一个例子,请参阅npm本身:它自己的package.json文件包含许多~2.4.0格式的依赖项,而不是2.4.x它可以使用的格式.通过坚持~,语法在70多个版本化依赖项列表中始终保持一致,无论哪个开始的修补程序编号是可接受的.
无论如何,SemVer还有更多,但我不打算在这里详细介绍.在节点semver软件包的自述文件中查看它.并且一定要在练习时使用语义版本控制计算器并尝试了解SemVer的工作原理.
RE:非连续版本号:OP的最后一个问题似乎是关于指定非连续版本号/范围(如果我公平地编辑它).是的,您可以使用常见的双管"或"运算符来执行此操作:||.像这样:
"angular": "1.2 <= 1.2.9 || >2.0.0"
Run Code Online (Sandbox Code Playgroud)
Jer*_*ony 139
基于semver,您可以使用
连字符范围XYZ - ABC
1.2.3-2.3.4
表示> = 1.2.3 <= 2.3.4
X-范围
1.2.x
1.X
1.2.*
Tilde Ranges
~1.2.3
~1.2
表示允许修补程序级别更改或次要版本更改.
插入符号范围^ 1.2.3 ^ 0.2.5 ^ 0.0.4
允许更改不会修改[major,minor,patch]元组中最左边的非零数字
^1.2.x (表示> = 1.2.0 <2.0.0)^0.0.x (表示> = 0.0.0 <0.1.0)^0.0 (表示> = 0.0.0 <0.1.0)Wil*_*hes 76
Bower使用semver语法,但这里有几个简单的例子:
您可以安装特定版本:
$ bower install jquery#1.11.1
Run Code Online (Sandbox Code Playgroud)
您可以使用〜指定"以此为开头的任何版本":
$ bower install jquery#~1.11
Run Code Online (Sandbox Code Playgroud)
您可以一起指定多个版本要求:
$ bower install "jquery#<2.0 >1.10"
Run Code Online (Sandbox Code Playgroud)
sha*_*ker 13
您还可以使用该latest关键字安装最新版本:
"dependencies": {
"fontawesome": "latest"
}
Run Code Online (Sandbox Code Playgroud)
小智 7
如果没有补丁号,~则相当于附加.x到非波浪号版本.如果有补丁号,则~允许所有补丁号> =指定的补丁号.
~1 := 1.x
~1.2 := 1.2.x
~1.2.3 := (>=1.2.3 <1.3.0)
Run Code Online (Sandbox Code Playgroud)
我没有足够的积分上公认的答案发表评论,但一些波浪信息是在与联semver文档赔率: "angular": "~1.2"将不符合1.3,1.4,1.4.9.也"angular": "~1"和"angular": "~1.0"是不等价的.这可以使用npm semver计算器进行验证.
| 归档时间: |
|
| 查看次数: |
110868 次 |
| 最近记录: |