默认不显示来源类型,因composer不持久化安装决策;必须用composer show -v查看source/dist字段的type与reference组合来判断:source.type=git且含url为source安装,dist.type=zip且含url为dist安装。

composer show 命令默认不显示包来源类型
直接运行 composer show 只列出包名、版本和简短描述,完全不体现安装来源(如 dist 还是 source)。这是因为 Composer 在安装后不会把源类型持久化记录在 vendor/composer/installed.json 里——它只存 type(比如 library)、dist/source 的原始 URL 和 commit hash,但不标记“本次安装用的是 dist 还是 source”。
用 composer show -v 查看每个包的详细安装信息
composer show -v 是最直接可行的方式。它会为每个已安装包输出包含 source 和 dist 字段的完整元数据,关键在于观察哪一项的 type 字段非空且与实际安装行为匹配:
- 如果
source下有type:git且url指向 GitHub/GitLab 等仓库,说明该包是以 source 方式克隆的(常见于require中用了dev-分支或"@dev"约束) - 如果
dist下有type:zip或tar,且url是 packagist.org 提供的归档地址,说明走的是 dist 安装(绝大多数稳定版本默认行为) -
install-path字段值始终是vendor/xxx/yyy,不能用来判断来源类型
通过 vendor/composer/installed.php 逆向验证(需谨慎)
这个文件由 Composer 自动生成,结构紧凑但可读性差。其中每个包条目含 dist 和 source 子数组,但注意:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 即使包是用 dist 安装的,
source字段仍可能非空(只是没被使用) - 真正决定安装方式的是
dist的reference是否存在 +type是否为zip/tar;若dist为空而source有reference和url,基本可判定是 source 安装 - 不要依赖
type字段顶层值(如"type": "library"),它和安装来源无关
为什么没有一键命令能明确标出 “dist/source”?
Composer 的设计哲学是“安装即完成”,不保留安装决策快照。所谓 “来源类型” 实际是安装时根据 composer.json 中的约束、本地配置(如 COMPOSER_DISCARD_CHANGES)、网络环境、以及 packagist 元数据动态决定的临时行为,不是包的固有属性。所以:
-
composer install --prefer-dist和--prefer-source是安装指令,不影响已安装包的元数据表达 - 没有
composer source-status或类似命令,因为官方认为没必要持久化这个维度 - 想自动化判断?只能靠解析
composer show -v输出或installed.php,并按上述规则做字段存在性+type 组合判断
真要写脚本批量识别,别信 type 字段顶层值,盯紧 dist.type 和 source.type 的实际内容,再结合 dist.reference 是否为空——这才是最稳的依据。










