composer show --locked 是唯一可信来源,因其直接解析 composer.lock 输出 name、version、dist.url、dist.shasum 和 type,确保镜像验证、ci 审计与生产部署所需数据准确完整。

导出 Composer 依赖列表,唯一能用于镜像验证、CI 审计或生产部署的清单,必须来自 composer.lock,且必须用 composer show --locked——其他任何方式(比如只读 composer.json 或不加 --locked 的 composer show)输出的都不是实际安装版本,无法校验 dist 文件一致性。
为什么 composer show --locked 是唯一可信来源
它绕过 vendor/ 目录,直接解析 composer.lock 文件,输出每个包的:name、version、dist.url、dist.shasum 和 type(dist/source)。这些字段正是镜像验证所需的全部信息:URL 对应下载源,shasum 可用于比对归档包完整性。
- 不加
--locked时,composer show读的是vendor/composer/installed.json,若有人删过子目录、或vendor/损坏,结果就失效 -
composer.json只声明约束(如"monolog/monolog": "^2.0"),不是实际装了什么 - 旧版 Composer 不支持
--locked?先运行composer self-update升级到 2.9.6+(当前稳定版)
composer show --locked 的关键参数组合
根据用途选参数,别混用或漏掉必要开关:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 导出生产环境可审计清单(不含 dev):
composer show --locked --no-dev --format=txt > deps-prod.txt - 生成机器可读的 SBOM 或 CI 校验数据:
composer show --locked --format=json > deps-locked.json—— 字段稳定,含.name、.version、.dist.shasum - 只提取包名+精确版本(纯文本,无描述/URL):
composer show --locked --no-dev --format=short > deps-flat.txt - 要包含开发依赖(如审计测试工具链):
composer show --locked --dev --format=json(注意:默认已含 dev,加--dev是显式强调)
用 composer.lock 直接解析更稳妥的场景
当 vendor/ 不存在、损坏,或你只想最小化依赖(不调用 Composer 命令)时,直接读 composer.lock 更可靠:
- 用
jq提取生产依赖:jq -r '.packages[] | "\(.name) \(.version) \(.dist.shasum // "N/A")"' composer.lock - PHP 一行命令(无需额外工具):
php -r '$l=json_decode(file_get_contents("composer.lock")); foreach($l->packages as $p) echo "$p->name $p->version $p->dist->shasum\n";' - 注意:
.packages是正式依赖;.packagesDev在新版 Composer 中已弃用,开发依赖统一在.packages中标记"dev": true,所以不要硬查.packagesDev - 别用
grep "name"或cat composer.lock | sed——JSON 结构敏感,容易匹配到注释或嵌套字段
镜像验证时最容易被忽略的细节
导出清单只是第一步,真正做镜像验证时,dist.shasum 必须和实际下载的 zip 包校验值一致,而这个值在 composer.lock 里是明确记录的。但要注意:
- 某些包类型(如 path repo、VCS 未打 tag 的本地仓库)的
version字段可能是+no-version-set,此时dist.shasum为空,不能用于校验,需人工确认来源 -
dist.url可能指向私有仓库或镜像源,验证前得确保该 URL 在目标环境可访问且未被中间代理篡改 -
composer show --locked输出的dist.shasum是小写十六进制字符串,校验脚本里别误用大写或带空格格式










