composer show --tree 的缩进反映真实依赖层级,每级缩进对应一个包在其 composer.json 中显式声明的 require;composer show --who 精准定位直接引用者,不追踪间接提供关系;--profile 不捕获 xdebug、open_basedir 或 i/o 导致的性能问题;中文元数据包热度应依据 lock 文件存在性、直接 require 关系及 autoload 映射判断。

composer show --tree 输出里哪些缩进是真实依赖层级
缩进不是排版,是直接 require 声明的嵌套深度。每级缩进代表一个包在它的 composer.json 中显式写了 require —— 比如 guzzlehttp/guzzle 下缩进出现 psr/http-client,说明 Guzzle 官方 composer.json 里真有这行声明。
常见误判点:
- 同一包在不同缩进重复出现(如
symfony/polyfill-php80在 2 级和 6 级都出现)→ 被多个上游包分别引入,版本可能不一致 - 看到
[dev-main]但你写了"^6.0"→ 实际安装版本被某个上游包强制降级,不是你写的约束失效,而是依赖链中某处锁死了版本 -
--tree不显示版本号,只列包名;要查具体装了哪个版本,必须单独跑composer show guzzlehttp/guzzle
怎么用 composer show --who 精准定位“谁在用这个包”
composer depends 在 2.4+ 默认关闭,且对 provide、replace 和 path 仓库支持极差,容易漏判。真正可靠的是 composer show --who。
它只扫描所有已安装包的 require 和 require-dev 字段,返回直接声明者,不追踪间接提供关系:
-
composer show --who psr/log→ 所有直接 requirepsr/log的包(比如monolog/monolog、slim/slim) -
composer show --who --no-dev monolog/monolog→ 过滤掉开发依赖,专注生产链路 - 结果为空 ≠ 没人用 → 可能是通过虚拟包(如
psr/log-implementation)间接提供,此时必须回看composer show --tree .全局结构
composer --profile 抓不到的隐藏性能杀手
composer install --profile 能精准打出 [2.1s] Resolving dependencies 这类耗时,但它不反映 Xdebug、open_basedir 或 autoload 冲突带来的拖慢。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
这些因素不会出现在 --profile 日志里,却能让整体流程变慢数倍:
- 运行
composer diagnose,如果提示The xdebug extension is loaded,而你没主动开调试,Xdebug 就在后台拖慢所有 PHP 操作(包括依赖解析中的数组合并) -
open_basedir启用时,Composer 会自动禁用 opcache 预加载,autoload 阶段性能下降 3–5 倍,但Resolving dependencies行数值完全不变 -
vendor/目录权限异常或磁盘 I/O 延迟高,会导致Writing lock file耗时飙升,但 --profile 不会告诉你底层是文件系统问题
中文元数据热度分析的关键陷阱
所谓“中文元数据”,实际指包名、描述、作者名含中文字符的 Composer 包——它们极少出现在主流生态,绝大多数是私有包或本地 path 仓库。分析这类包的“热度”,不能靠 composer show --tree 或第三方统计接口。
真正可操作的判断依据只有三个:
- 该包是否出现在
composer.lock的packages或packages-dev列表中(存在即被解析过) - 是否被至少一个其他包在
require字段直接引用(用composer show --who验证) - 其
autoload命名空间是否被主项目或其它包的 PSR-4 映射覆盖(否则即使装了也加载不到)
别信“下载量”或“star 数”——私有包没有这些指标;也别依赖 composer-unused 扫描结果,它无法识别中文命名空间下的类引用。最稳的方式:删掉这个包,跑一遍全量测试,看哪块逻辑崩了。










