应避免裸用 dev-master 或 dev-main,推荐用 dev-branch#commit-hash 或 v*tag 锁定具体提交;安装分支需加 -s dev;私有仓库须配置 repositories 且 type 为 vcs。

直接用 composer require 指定分支或 Tag 不可靠
Composer 默认会把 dev-master 当作一个“版本”,但实际它不是稳定版,也不受 minimum-stability 严格约束。很多项目在 composer.json 里写 "vendor/package": "dev-master",结果 CI 构建失败,或者本地装的是某个 commit,线上却是另一个 —— 因为 dev-master 是浮动的,随时可能变。
真正可控的方式是用 dev-* + #commit-hash 或 v* + #tag 显式锁定。
-
"vendor/package": "dev-main#abc1234":指定 main 分支的某次提交(推荐用于未打 tag 的开发中) -
"vendor/package": "dev-develop#5f8a9b2":同上,但指向 develop 分支 -
"vendor/package": "v2.3.0":如果对方已打正式 tag,优先用这个(最稳定) -
"vendor/package": "dev-main as 2.4.0":仅当你要临时覆盖版本号供其他依赖解析时才用,有风险
composer require 命令行加 -s dev 才能装分支
默认 composer require vendor/package:dev-main 会报错:Could not find package vendor/package 或提示 “no matching package found”。这是因为 Composer 默认只搜 stable 包,dev- 前缀的引用必须显式允许开发版。
正确做法是加上 --stability=dev(简写 -s dev):
composer require vendor/package:dev-main -s dev
注意:-s dev 影响的是本次安装的「解析策略」,不是全局设置;它不会修改 composer.json 中的 minimum-stability,但会临时允许匹配 dev-* 引用。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 如果项目已有
"minimum-stability": "stable",不加-s dev就无法装任何dev-分支 - 加了
-s dev后,Composer 会去 Packagist 查该包的dev-main分支信息,并尝试 clone 对应仓库 - 若包未在 Packagist 注册(比如私有 GitLab 仓库),还需先在
repositories里声明源
私有仓库必须配 repositories,且类型不能错
想装 GitHub/GitLab 私有库的某个分支,光写 "vendor/private": "dev-feature/login#abcd123" 不够。Composer 不知道从哪拉代码,会直接报 Package not found。
必须在 composer.json 顶层加 repositories 块,且 type 要选对:
{
"repositories": [
{
"type": "vcs",
"url": "https://gitlab.example.com/group/private-package.git"
}
]
}
-
"type": "vcs":适用于任意支持 Git/Svn/Hg 的远程仓库(最常用) -
"type": "package":仅当你需要完全手动定义包元数据(比如没composer.json)时才用,麻烦且易错 - URL 必须是可 git clone 的地址,带
.git后缀更稳妥;HTTP/HTTPS 需认证时,提前配好auth.json - 配完要运行
composer clear-cache,否则旧缓存可能导致分支识别失败
Tag 和分支引用在 lock 文件里表现不同
composer.lock 里记录的是真实 commit hash,这点对部署很关键 —— 但不同写法导致 lock 内容生成逻辑不同。
例如:
-
"dev-main"→ lock 中记录为"reference": "a1b2c3...",但下次composer update可能拉新 commit(除非加#hash) -
"dev-main#7d8e9f0"→ lock 中"reference"固定为该 hash,update 也不会变 -
"v2.3.0"→ lock 中"version"是"2.3.0.0","reference"是对应 tag 的 commit,安全
所以,只要不是明确要跟踪最新开发进展,就别裸用 dev-master 或 dev-main。CI/CD 流水线里一旦用了浮动分支,两次构建可能用到不同代码,问题很难复现。










