相信 Composer 对你来说已经相当熟悉了,不过对于包的版本,我觉得应该还有不少同学不是那么清楚各种写法到底是啥意思。

语义化版本

首先,我们来了解一个东西:语义化版本版本格式:主版本号.次版本号.修订号,版本号递增规则如下: 主版本号:当你做了不兼容的 API 修改, 次版本号:当你做了向下兼容的功能性新增, 修订号:当你做了向下兼容的问题修正。 先行版本号及版本编译信息可以加到“主版本号.次版本号.修订号”的后面,作为延伸。

语义化版本一般我们使用 3 个部分来表示一个版本,例如:1.4.23,1 为主版本号,4 为次版本号,23 为修订号或者补丁版本号。当然你肯定也见过 1.0.0-alpha1 这样在后面添加修饰符号来表示先行版本。

那在 composer 使用过程中我们通常会有这几种写法:

不限定版本极不推荐这样玩哦

使用 * 号来表示版本的时候,composer 会根据你配置中的 minimum-stability 的值情况来决定安装最新的 dev 还是 stable 版本。 比如:

"require": { "overtrue/wechat": "*" }

根据上面语义化版本的定义,这样写就相当于允许大版本的安装,那你的代码在 composer 更新依赖后可能就跑不起来了(如果第三方包作者做了大版本更新)。

使用 dev- 前缀加分支名

我们在自己开发一个包的时候,经常会用 dev-master 或者 dev-develop 来指定版本,它表示使用该分支下最新的提交。

比如:

"require": { "overtrue/wechat": "dev-master" }

这个也是不推荐在生产环境使用的,因为它其实与 * 没有太大的差别,不过 * 在 minimum-stability 为 stable 时是安装最新的稳定版。但是二者都无法保证 API 兼容性。

使用 ~ 约束符锁定小版本的方式

这种方式比较常用,也是比较安全的,比如我们希望安装 >= 1.2 并且 < 2.0 的版本时,根据语义化版本的定义,次版本号的变化是新增功能,所以 API 是稳定的,也就是可以安全更新的。 你可以写成:

"require": { "overtrue/wechat": "~1.2" }

如果你希望次版本都不要更新,只允许修订版本(补丁版本)的变化,>= 1.1.15 并且 < 1.2.0,则写成:

"require": { "overtrue/wechat": "~1.1.15" }

所以,你应该看出规律了,~ 的作用是允许表达式中最后一位变到最大值,~1.1 表示可以为 大于等于 1.1 的任何版本,比如 1.1.0、1.2.0、1.3.5 、1.99.9999、 1.9999.999999 都可以安装,但是不能安装 2.0.0, 同理,~1.1.2 表示 大于等于 1.1.2 的任何版本,比如 1.1.2、1.1.3、1.1.99、 1.1.9999 都可以安装。

使用 ^ 约束符锁定大版本

上面 ~ 表示最后一位可变,前面几位都不可变,那 ^ 的作用不一样的是:^ 锁定不允许变的第一位,其实学过正则的同学都知道 ^ 表示起始,^a 表示以 a 开头的全部。

所以, ^1.2 表示任意大于等于 1.2 的 1.x.x 版本,比如 1.2.0、1.2.1、1.3.0、1.9.99999 等。只要前面的 1 并且大于 ^ 后面指定的 1.2 都满足条件。

锁定版本范围

有时候我们的使用场景要求只能安装某些版本范围内的时候,可以使用 >、=、<=、|这些符号来组合,比如:>= 1.3 <1.6、>=1.3 | >=1.7 、3.0|4.0 等。这样的使用场景并不多,根据你的情况来调整用法就好。

最后就是使用具体版本号

使用 =1.2.34 或者 1.2.34 都是指定了具体的版本号, composer 不会考虑检查新版本来安装。

注意

如果你的版本是 1.0 以下,0.0.1,0.9.99999 等这样的版本的时候, ^ 的作用与 ~ 一样,也就是说:

^0.0.3 表示:>=0.0.3 < 0.0.4

所以不要掉进这个坑哦。

总结

无论你是包的作者,还是使用者,正确使用版本是非常重要的,尤其对于有一定使用量的包作者来讲,严格遵守语义化版本的规范是对你的用户负责。最后引入 http://semver.org 官网的一句话:记住, 语义化的版本控制就是透过版本号的改变来传达意义。若这些改变对你的使用者是重要的,那就透过版本号来向他们说明。

composer 设置版本号_Composer 版本约束表达式的使用相关推荐

  1. composer 设置版本号_Composer依赖管理 – PHP的利器

    别再到处搜PHP类扩展包了,对于现代语言而言,包管理器基本上是标配.Java 有 Maven,Python 有 pip,Ruby 有 gem,Nodejs 有 npm.PHP 的则是 PEAR,不过 ...

  2. composer 设置版本号_composer 安装及使用

    1.安装: composer的安装就不用多说了,官网下载 或者直接yum安装. 2.常用命令: 1)配置为国内镜像仓库 composer config -g repo.packagist compos ...

  3. composer设置代理_composer 设置代理

    Docker registry V2 部署私有Docker Registry 搭建 Insecure Registry 修改Registry server上的Docker daemon的配置,为DOC ...

  4. Composer 中依赖包的版本约束和稳定性

    版本约束 通过 Composer 来安装依赖包,关于依赖包的版本约束,可以使用多种不同的方式. 版本格式 版本格式:主版本号.次版本号.修订版本号,版本号递增规则如下: 主版本号:当你做了不兼容的 A ...

  5. uni-app APP 打包设置版本号和获取当前应用版本信息

    设置版本号 获取当前应用版本信息 plus.runtime.getProperty(plus.runtime.appid,(appInfo)=>{// appInfo为当前应用程序的所有信息co ...

  6. 【MAC、Windows系统的node版本管理工具——nvm】nvm的安装、nvm常用命令、nvm设置默认 node 版本

    nvm 目录 总结 nvm 的使用 1. nvm 安装 2. nvm 常用命令 总结 总结 在我们的实际开发过程中,需要使用 nvm use vxx 将 node 版本设置成其他更高或更低的版本,但是 ...

  7. ANDROID版本号和版本名称的重要性介绍

    转载请注明出处http://blog.csdn.net/y150481863/article/details/41249159,来自[http://blog.csdn.net/y150481863] ...

  8. Android之获取版本号和版本名称

    安卓开发必不可少,需要获取展示版本信息.根据自己的需要,进行版本号.版本名称设置. Android Studio可以在build.gradle文件的中配置,或者在对应AndroidManifest.x ...

  9. android如何查看当前app的版本号,《android 获取当前app的版本号和版本名称》

    一.概念 apk打包之前根据自己的需要,进行版本号.版本名称设置.android studio 设置是于build.gradle文件的中设置. android{ defaultConfig { ver ...

最新文章

  1. ICRA 2020 | 实时语义立体匹配
  2. Android从普通发送和接收短信到对短信进行拦截
  3. vivado实现VGA
  4. Windows Phone如何获取和添加联系人
  5. HDU 2822 Dogs【两次bfs】
  6. 容器学习 之 安装docker(二)
  7. Java中的类变量(静态变量static的具体用法快速入门))
  8. 尴尬!三星Galaxy S10系列面部识别疑似翻车:连兄妹都分不清
  9. 云服务器惠普版_工作进度通报,笔记本开箱目录20200531版
  10. Windows 安装两个MYSQL实例
  11. 综述 | 机器视觉表面缺陷检测
  12. 如何用php建立图库,教你搭建自己的图片库
  13. 健身菜鸟需要掌握哪些基本的健身常识
  14. JGJ254-2011 建筑施工竹脚手架安全技术规范 免费下载
  15. openGL增强表面细节----法线贴图
  16. “打工女皇帝”吴士宏-永远先走一步
  17. 四阶魔方玩法总结V1.0
  18. ROC曲线的通俗理解
  19. 关于图像opencv中对于长宽的定义
  20. Oracle - 【连接1】广义笛卡儿积+一般连接+自连接

热门文章

  1. colorkey口红怎么样_colorkey口红推荐什么颜色
  2. Android打印机--TSC 标签打印
  3. android 读取手机存储数据恢复,Android手机数据恢复
  4. C#小工具 ---- 压缩图片并指定图片大小
  5. 利用7-zip软件压缩并加密自己的保密文件
  6. 云计算:细分之七大类商业模式
  7. 免疫学实验美图赏析馆(第三期)
  8. 计算机工程与科学北京,高强铝合金加速腐蚀方法的研究-计算机工程与科学-北京航空航天大学.PDF...
  9. 我的世界服务器如何制作武器,我的世界2B2T服务器玩家都会去做的7件事 第1件是游戏中的禁忌...
  10. input autocomplete用法