0

0

你必须知道的 Composer 版本约束

藏色散人

藏色散人

发布时间:2019-08-05 13:46:36

|

3231人浏览过

|

来源于learnku

转载

你必须知道的 Composer 版本约束

如果你还不知道 composer,请前往composer使用教程栏目然后开始阅读吧。

我曾见过许多人被他们使用的 composer 包之间依赖的约束问题所困扰。希望这篇文章能指出某些问题的原因,并提供避免这些问题的方法。我会从最糟的情景入手,并一步步改进约束。

全能的星号:*

Composer 有一个依赖解析器,所以它能够自动的找出我想要的,对吗?错。

* 声明一个版本约束可能是最糟糕的做法之一。因为你绝对无法控制你会得到什么。它可能是 任何 匹配 minimum-stability 和其它约束的版本。

基本上你就相当于在和 Composer 玩一个 俄罗斯轮盘赌 游戏,最终你会被它伤害到。然后你就可能会责怪这个工具太令你失望了。

如果你继续粗心大意,请最起码依赖最新的开发版本,通常被标记为 dev-master

写死的分支名称

所以你现在在使用 dev-master。问题在于,dev-master 所指向的代码可能会更改。至少,你获取的总是不稳定的包(从 composer 所表征的稳定性标志来看不稳定)。然而,更大的问题在于,dev-master 的意义可能随时会变。

比方说,现在它所表示的是最新的 1.0 开发版本。当开发者说他们要开始开发 1.1 版本的时候,dev-master 这个分支名字不再指向 1.0 分支,它开始指向最新的 1.1 开发分支。

除非你紧密关注着该库的开发,否则,直到你运行了 composer update 命令时,问题才会显示在你面前,然后毁了你一整天。因此,直接引用分支的名称并不是一个可持续的解决方案。幸运的是,在别名的问题上,composer 可以提供帮助。

分支别名

分支别名作为一个属性,包维护者可以将其放到他们的 composer.json 里面,允许这些分支名称映射到版本上。

像 1.0 , 2.1 等等分支名称并不是必须的, Composer 已经对这些进行了处理。

但是像 master 这样的分支名称会产生一个名为 dev-master 的版本,你一定要给它别名。 Composer 文档里面有 一个不错的关于别名的文章 ,里面解释了如何定义分支别名:

{
    "extra": {
        "branch-alias": {
            "dev-master": "1.0.x-dev"
        }
    }
}

dev-master 版本会映射到一个 1.0.x-dev 的别名上,

这基本上意味着你可以用一个 1.0.*@dev 的约束来要求包。这样的好处是 1.0 的含义会被定义,且不会改变。 它也将使切换到稳定版本更容易。

分支别名的警告需要包维护者将它们放入。如果使用的是没有分支别名的库,则向它们发送一个上拉请求,将上面的 extra 部分添加到它们的 composer.json 中。

CoCo
CoCo

智谱AI推出的首个有记忆的企业自主Agent智能体

下载

稳定版本

1.0.*@dev 这个约束已经很不错了。但问题是到目前为止,仍然还没有一个稳定的版本。除了你仍然运行着一个不稳定的版本这个事实之外,你的代码并没有什么问题。

但是如果别人的项目依赖了你的包,那么你的用户需要明确地使用 @dev 标识来允许 Composer 安装不稳定的版本,或者干脆降低项目 minimum-stability 的等级,这意味着他们将获得 所有依赖包 的不稳定版本。

避免开发版本不稳定性的最好方法就是打上 release 标签(指发布稳定版本)。 如果你正在使用一个没有打上 release 标签的库,提醒它的维护者直到打上标签。现在就做!

作为 Composer 社区的一份子,我们要有责任心。 我们必须发布稳定的版本,并且应该维护好 CHANGELOG (更新日志)。 这很不容易,但是这将让整个生态系统发生巨大的改变。记住,如实地、 语义化 地来打标签。

当你发布了一个稳定的版本,你就能去掉 @dev 标识并且将你的约束改为 1.0.*

下一个重大版本

如果你所依赖的包的每一个发布节点都坚持遵守语义化版本的规则,并且严格向后兼容,那么你就可以逐渐提高约束。

现在 1.0.* 版本有一些潜在的兼容性问题,并很快发布了 1.1 版本。如果你的约束是 1.0 ,但是别人需要 1.1 版本的新特性(还记得向后兼容吗?), 他们就不能安装 1.1 版本。所以你需要重写你的约束,比如: 1.*

好极了,除非你开始依赖 1.1 版本的新特性,否则你不必修改约束,它将会仍然匹配 1.0 这个没有新特性的版本。

接着,你修改约束为 >=1.1,,但这种写法比较麻烦。使用波浪线操作符能允许你用简洁的方式表示上面的表达式: ~1.1 。这表示任意在 1.1 以上的 1.* 版本。现在你知道了,鼓励语义化版本是为了使用波浪线操作符,并且可以最大化的封装兼容性。

TLDR

使用 branch-alias

标签发布,使发布更可靠和 符合语义.

使用 ~ 运算符。

相关专题

更多
Java编译相关教程合集
Java编译相关教程合集

本专题整合了Java编译相关教程,阅读专题下面的文章了解更多详细内容。

11

2026.01.21

C++多线程相关合集
C++多线程相关合集

本专题整合了C++多线程相关教程,阅读专题下面的的文章了解更多详细内容。

4

2026.01.21

无人机驾驶证报考 uom民用无人机综合管理平台官网
无人机驾驶证报考 uom民用无人机综合管理平台官网

无人机驾驶证(CAAC执照)报考需年满16周岁,初中以上学历,身体健康(矫正视力1.0以上,无严重疾病),且无犯罪记录。个人需通过民航局授权的训练机构报名,经理论(法规、原理)、模拟飞行、实操(GPS/姿态模式)及地面站训练后考试合格,通常15-25天拿证。

16

2026.01.21

Python多线程合集
Python多线程合集

本专题整合了Python多线程相关教程,阅读专题下面的文章了解更多详细内容。

1

2026.01.21

java多线程相关教程合集
java多线程相关教程合集

本专题整合了java多线程相关教程,阅读专题下面的文章了解更多详细内容。

4

2026.01.21

windows激活码分享 windows一键激活教程指南
windows激活码分享 windows一键激活教程指南

Windows 10/11一键激活可以通过PowerShell脚本或KMS工具实现永久或长期激活。最推荐的简便方法是打开PowerShell(管理员),运行 irm https://get.activated.win | iex 脚本,按提示选择数字激活(选项1)。其他方法包括使用HEU KMS Activator工具进行智能激活。

2

2026.01.21

excel表格操作技巧大全 表格制作excel教程
excel表格操作技巧大全 表格制作excel教程

Excel表格操作的核心技巧在于 熟练使用快捷键、数据处理函数及视图工具,如Ctrl+C/V(复制粘贴)、Alt+=(自动求和)、条件格式、数据验证及数据透视表。掌握这些可大幅提升数据分析与办公效率,实现快速录入、查找、筛选和汇总。

6

2026.01.21

毒蘑菇显卡测试网站入口 毒蘑菇测试官网volumeshader_bm
毒蘑菇显卡测试网站入口 毒蘑菇测试官网volumeshader_bm

毒蘑菇VOLUMESHADER_BM测试网站网址为https://toolwa.com/vsbm/,该平台基于WebGL技术通过渲染高复杂度三维分形图形评估设备图形处理能力,用户可通过拖动彩色物体观察画面流畅度判断GPU与CPU协同性能;测试兼容多种设备,但中低端手机易卡顿或崩溃,高端机型可能因发热降频影响表现,桌面端需启用独立显卡并使用支持WebGL的主流浏览器以确保准确结果

25

2026.01.21

github中文官网入口 github中文版官网网页进入
github中文官网入口 github中文版官网网页进入

github中文官网入口https://docs.github.com/zh/get-started,GitHub 是一种基于云的平台,可在其中存储、共享并与他人一起编写代码。 通过将代码存储在GitHub 上的“存储库”中,你可以: “展示或共享”你的工作。 持续“跟踪和管理”对代码的更改。

7

2026.01.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
第二十四期_PHP8编程
第二十四期_PHP8编程

共86课时 | 3.4万人学习

成为PHP架构师-自制PHP框架
成为PHP架构师-自制PHP框架

共28课时 | 2.4万人学习

第二十三期_PHP编程
第二十三期_PHP编程

共93课时 | 6.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号