Composer无内置命令直接列出开发分支依赖,可靠方法是解析composer.lock中version字段是否以“dev-”开头或含“x-dev”,并结合source安装方式确认。

Composer 本身不直接支持“列出开发分支依赖”
Composer 没有内置命令能直接筛选出「当前安装的是开发分支(如 dev-main、dev-develop)而非稳定版本(如 1.2.3 或 v2.0.0)」的包。它只记录最终解析出的 dist 或 source 信息,不显式标记“这个包是 dev 分支装的”。但你可以通过组合命令和检查 composer.lock 内容来识别。
用 composer show -s 查看源码安装状态
该命令会列出所有已安装包及其安装方式(dist 表示压缩包,source 表示从 VCS 克隆),而绝大多数开发分支依赖都是以 source 方式安装的——因为 Composer 默认对 dev- 版本禁用 dist(除非显式配置 "prefer-dist": true 并且包提供 zip)。所以这是最快速的近似判断方式:
composer show -s | grep "source$"
注意:source 不 100% 等价于“开发分支”,比如本地路径仓库(path 类型)也显示为 source;但真实项目中,绝大多数 source 来源就是 Git 分支(dev-* 或 dev-master 等)。
解析 composer.lock 中的 reference 和 version
真正可靠的方式是读取 composer.lock,检查每个包的 version 字段是否匹配 dev- 前缀,并结合 source 的 reference(即 commit hash)确认它确实来自分支而非 tag:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
version字段为"dev-main"、"dev-develop"、"dev-master"等,基本可判定是开发分支 -
version是"dev-feat/login#abc123"这种带 commit hash 的,也是开发分支(Composer 有时会这样写) -
version是"1.2.x-dev"—— 这表示“1.2 分支的最新提交”,仍属开发分支范畴 - 若
version是"1.2.3"、"v2.0.0"、"9999999.9999999.9999999-dev"(别名),则不是你关心的“开发分支依赖”
可用如下命令快速提取:
jq -r '.packages[] | select(.version | startswith("dev-") or contains("x-dev")) | "\(.name) \(.version)"' composer.lock 2>/dev/null
(需提前安装 jq;若无 jq,可用 Python 或 PHP 脚本解析 JSON,但纯 shell 下较难健壮处理)
为什么 composer outdated 不适合这个场景
composer outdated 显示的是「有更新可用的包」,跟是否处于开发分支无关。一个 dev-main 包可能长期没 push 新提交,outdated 就不会显示它;反过来,一个 1.2.3 包如果新发布了 1.2.4,它会被列出,但它根本不是开发分支。混淆这两者会导致误判。
真正要锁定“哪些包正在被当作开发分支使用”,唯一权威来源是 composer.lock 的 version 字段 + 安装方式(source)。其他命令都只是辅助线索。

















