Node.js bower(和npm)版本语法是什么?

Node.js bower(和npm)版本语法是什么?,node.js,bower,semantic-versioning,Node.js,Bower,Semantic Versioning,Bower使我能够使用以下语法指定包的版本要求: "dependencies": { "<name>": "<version>", }, “依赖项”:{ "": "", }, 但是我还没有找到的语法。我知道我可以指定以下版本: 大于具有>1.0.0“ 大于或等于一个版本:“>=1.0.0” 或者在某些范围内:“1.0.0-2.0.0” 我还知道,有一个常见的版本语法包含tilde:“~1.0.0”。但我不确定它的含义,以及它是否与“=1.0.0”相同 我还想知

Bower使我能够使用以下语法指定包的版本要求:

"dependencies": {
  "<name>": "<version>",
},
“依赖项”:{
"": "",
},
但是我还没有找到
的语法。我知道我可以指定以下版本:

  • 大于具有
    >1.0.0“
  • 大于或等于一个版本:
    “>=1.0.0”
  • 或者在某些范围内:
    “1.0.0-2.0.0”
我还知道,有一个常见的版本语法包含tilde:
“~1.0.0”
。但我不确定它的含义,以及它是否与
“=1.0.0”
相同


我还想知道我是否能够指定多个非连续的版本,例如确切的
1.0.3
加上大于
1.5.0
的版本等等。

简而言之,Bower版本号(和NPM)的语法称为SemVer,是“语义版本控制”的缩写。您可以在的API上找到有关Bower和NPM中使用的SemVer的详细语法的文档。您可以在上了解有关底层规范(未提及
~
或其他语法详细信息)的更多信息

有一个你可以玩的,使所有这些更容易摸索和测试

SemVer不仅仅是一种语法!关于发布API的正确方法,有一些非常有趣的事情要说,这将有助于理解语法的含义。关键是:

一旦您确定了您的公共API,您就可以通过特定的版本号增量来传达对它的更改考虑X.Y.Z(Major.Minor.Patch)的版本格式。不影响API增量(补丁版本)、向后兼容的API添加/更改增量(次要版本)和向后不兼容的API更改增量(主要版本)的错误修复

因此,您关于
~
的特定问题与Major.Minor.Patch模式有关。(与相关插入符号操作符一样,
^
)您可以使用
~
将您愿意接受的版本范围缩小为:

  • 后续的补丁级别更改为相同的次要版本(“不影响API的错误修复”),或:
  • 后续次要级别对同一主要版本的更改(“向后兼容的API添加/更改”)
例如:要指示您将在1.2.x树上进行任何后续修补程序级别更改,从1.2.0开始,但小于1.3.0,您可以使用:

"angular": "~1.2"
  or:
"angular": "~1.2.0"
这还可以获得与使用
.x
语法相同的结果:

"angular": "1.2.x"
但是,您可以使用tilde/
~
语法,使其更加具体:如果您只愿意接受从1.2.4开始但仍低于1.3.0的补丁级别更改,则可以使用:

"angular": "~1.2.4"
向左移动,朝向主版本,如果您使用

"angular": "~1"
。。。这和

"angular": "1.x"
  or:
"angular": "^1.0.0"
…并匹配高于1.0.0但低于2.0的任何次要或修补程序级别更改:

注意上面的最后一个变化:它被称为“插入符号范围”。插入符号看起来非常像
,因此您可以原谅认为它的意思是“任何大于1.0.0的版本”。(我确实滑倒了。)不

插入符号范围基本上是用来表示您只关心最左边的有效数字-通常是主要版本-并且允许任何不影响最左边数字的次要或补丁级别更改。但是,与指定主版本的波浪线范围不同,插入符号范围允许您指定精确的次/面片起点。因此,虽然
^1.0.0===~1
,但Bower使用的插入符号范围(如
^1.2.3
)可以表示您将进行任何更改
=1.2.3&&&),但这里有几个快速示例:

您可以安装特定版本:

$ bower install jquery#1.11.1
您可以使用~指定“以此开头的任何版本”:

$ bower install jquery#~1.11
您可以同时指定多个版本要求:

$ bower install "jquery#<2.0 >1.10"
$bower安装“jquery#1.10”
基于,您可以使用

  • 连字符范围X.Y.Z-A.B.C
    
    1.2.3-2.3.4
    

    表示>=1.2.3=1.2.0=0.0.0=0.0.0您还可以使用
    最新
    关键字安装可用的最新版本:

      "dependencies": {
        "fontawesome": "latest"
      }
    

    如果没有修补程序编号,
    ~
    相当于将
    .x
    附加到非平铺版本。如果有修补程序编号,
    ~
    允许所有修补程序编号>=指定的修补程序编号

    ~1     := 1.x
    ~1.2   := 1.2.x
    ~1.2.3 := (>=1.2.3 <1.3.0)
    
    ~1:=1.x
    ~1.2:=1.2.x
    
    ~1.2.3:=(>=1.2.3这可能是So
    ~
    的重复,特别是指修补程序(第三个)编号可能大于指定的编号,例如
    ~1.2.3
    相当于
    =1.2.3也可用于次要(第二个)有趣的是,SemVer文档似乎也允许使用x符号(这对人类来说更加直观).x-notation一开始读起来很直观,但灵活性要小得多。例如,
    '1.1.x'==='>=1.1.0'==='~1.1.0'
    。1.1.0的大小写很简单。但是x-notation不能是细粒度的,就像
    '>=1.1.4'
    '1.1.4'
    一样。因此,您最终会在依赖项列表中的一个地方找到
    '1.1.x'
    ,然后是
    '2.3'在另一个地方。这很好,而且很有效,但是开发人员需要解析多个语法来读取单个列表。而且,如果您编写程序包以编程方式设置版本,您需要一个语法。而且,大多数人希望防止破坏更改。因此,所有问题都可以通过
    ~
    解决。哈。我认为“grok”与书呆子式的文化(可能与年龄有关)相比,它的地理位置要小得多,@Clonkex。对于未来的读者来说:这是指海因莱因在一个陌生的地方的陌生人……感谢你给出了一个毫无意义、易读的答案。我不必追溯或做任何事情,只是,砰,答案就在这里。干得好;)我对这个的实际用途很好奇。轮盘赌安装?查看
    ~1     := 1.x
    ~1.2   := 1.2.x
    ~1.2.3 := (>=1.2.3 <1.3.0)