composer show 默认只显示顶层依赖,因其仅列出 composer.json 中 require 和 require-dev 显式声明的已安装包,不包含传递依赖;查全部已安装包需用 composer show -a,查依赖树用 composer show --tree,查 autoload/scripts 须加 -s,查远程所有版本必须用 --all。

composer show 命令为什么只显示部分包?
默认情况下 composer show 只列出当前项目直接 require 的包,不包含二级依赖(即依赖的依赖)。这不是 bug,是设计行为。
想看全部已安装包:用 composer show -a;想查某个具体包(比如 laravel/framework)的版本和依赖树:用 composer show laravel/framework;想确认某包是否被锁死在 composer.lock 中:加 -s 参数看源地址,输出里带 mirrors.aliyun.com 才说明真走镜像。
常见误操作:只跑 composer show 就断定“没装上”,其实它根本没列 dev 依赖或间接依赖。要排查缺失包,得结合 composer install -v 日志或直接查 vendor/ 目录。
composer config -g repo.packagist 不生效的三个硬性条件
这条命令不是“试试看”,它必须同时满足三件事,缺一不可:
-
-g参数不能漏,否则只改当前项目composer.json,换目录就失效 - 键名必须是
repo.packagist(单数repo,不是repos.packagist或packagist.org),Composer 2.x 硬编码只认这个 - URL 必须以
/结尾,且开头是https://,例如https://mirrors.aliyun.com/composer/—— 少个斜杠会拼出/composerpackages.json导致 404
漏掉任意一项,命令执行无报错,但 composer config -g repo.packagist 查出来是空或 null,实际请求仍发往 packagist.org。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
验证镜像是否真生效,只看这三处输出
别信命令回显“成功”,得交叉验证:
- 查配置:
composer config -g repo.packagist或composer config -g repositories.packagist.org,输出必须是完整 JSON 对象,如{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"} - 看诊断:
composer diagnose,找到 “Repo:” 那行,域名必须是mirrors.aliyun.com这类镜像域名,不是packagist.org - 抓真实请求:
composer update -vvv 2>&1 | grep -i downloading,日志里出现的 URL 路径必须含镜像域名,且结尾是/p2/xxx.json或/packages.json
如果前三项都对,但下载仍慢,大概率是本地 DNS 解析异常、CA 证书过旧(cURL error 60),或者 CI 流水线里用了 sudo composer config -g 写进了 root 用户配置,而构建进程跑在普通用户下。
项目级配置比全局更可靠,但要注意格式陷阱
团队协作或 CI 场景下,全局配置容易被覆盖或权限错位,项目级写进 composer.json 更稳:
- 进项目根目录,运行
composer config repo.packagist composer https://mirrors.aliyun.com/composer/(注意不加-g) - 它会自动向
composer.json的"repositories"字段写入"packagist"子项,不覆盖已有私有源 - 前提:原
"repositories"是对象(如"repositories": { "packagist": {} }),不是数组;如果是数组("repositories": []),命令会失败,需先手动改成对象格式 - 换源后首次
composer install若报 hash 不匹配,删掉vendor/和composer.lock重来
真正容易被忽略的是:项目级配置生效的前提是 "repositories" 字段存在且为对象结构——很多老项目 composer.json 根本没这个字段,或者它是空数组,这时命令不会自动创建,而是静默失败。










