使用(composer)作曲家越多,你就会越多地看到这不是所要求的模块/包或作曲家的实际问题,关于安装packagist包是,关于版本控制的符号:
安装依赖项时,我们习惯于安装一个遵循已知公共接口的版本并执行它所承诺的版本。这样我们就可以安全地在代码中使用它。
依赖关系可以改变而不会破坏向后兼容性。然后,新版本将具有更大的版本号(xy),具体取决于更改类型(错误修正或添加的功能)。
当您依赖包时,您可能希望定义一系列可以安装的版本,而不是指定锁定版本。这允许您使用简单的更新命令从外部代码免费接收修复程序(包括安全修复程序)。
根据你的依赖管理器,你可以定义使用通配符(版本约束上),比较像<=,逻辑运算符(,往往意味着与和|手段OR),等等…使用逻辑运算符,你可以混合和匹配不同版本的约束来构建更加复杂的。例如>=0.9.0,<0.11.0意味着相匹配的一切0.9.和0.10.,但也可以记作0.9. || 0.10.*。
还有一些语法糖操作符,如~(代字号)和^(插入符号)。
~4.1.3
意思是 >=4.1.3, <4.2.0
,~4.1
意思是 >=4.1.0,<5.0.0
(最常用的),~0.4
意思是 >=0.4.0,<1.0.0
,~4
意思是 >=4.0.0,<5.0.0
插入符号略有不同:
* ^4.1.3
(最常用的)是指 >=4.1.3,<5.0.0
,
* ^4.1
意思是 >=4.1.0,<5.0.0
,~4.1但是:
* ^0.4
意味着 >=0.4.0,<0.5.0
,这~0.4与定义向后兼容的版本范围不同,并且更有用。
* ^4>=4.0.0,<5.0.0
与 ~4
的意思相同
另外,还有个特殊的连接线(-)运算符,这个比较麻烦,理解起来很蛋疼,少用。
例如
composer require some-package “>=1.0 <1.1 || >=1.2”
这个常用于项目版本使用 Semantic 命名法 的场合。
在 semantic 命名法中,将版本号分为三部分:
如: 1.0.1,代表主版本号 1,副版本号 0,补丁版本号 1.
~1.2
代表:
>=1.2 < 2.0.0
~1.2.3
代表
>=1.2.3 <1.3.0
理解上主要靠最后的那个数字:
而在 NPM 对版本的描述中,波浪号这样定义:Tilde Ranges ~1.2.3 ~1.2 ~1
Allows patch-level changes if a minor version is specified on the comparator. Allows minor-level changes if not.
翻译就是:
如果提供了副版本号,只允许改变补丁版本
如果没有,可以改变副版本号
~1.2 代表:
>=1.2.0 < 1.3.0
这个符号更接近于 Semantic 命名
法 的要求:
^1.2.3 代表:
>=1.2.3 <2.0.0
Allows changes that do not modify the left-most non-zero digit in the [major, minor, patch] tuple.
翻译一下就是:
不允许改变最左边的非零数字,剩下的可以随便修改
^1.2 代表:
>=1.2.0 < 2.0.0
^1.2.3 代表:
>=1.2.3 < 2.0.0
^0.2.3 代表:
>=0.2.3 < 0.3.0
^0.0.3 代表:
>=0.0.3 < 0.0.4 (意味只有 0.0.3 符合)