composer status 默认空输出,是因为它仅检查以 source 模式安装(含 .git 目录)的包,而默认 prefer-dist: true 导致绝大多数包通过 zip 安装、无 Git 仓库,故被跳过;空输出仅表示“所有 source 包未被修改”,不等于 vendor 干净。

composer status 默认几乎不输出,不是命令坏了,是你正在用的包根本没被它检查——90% 的 vendor 包走的是 zip 安装(prefer-dist: true),没 .git 目录,status 就直接跳过。
为什么 composer status 总是空输出?
它只扫描带 .git 目录的包,也就是以 source 模式安装的包。运行 composer show monolog/monolog,如果输出里没有 source 字段,说明这个包当前是 dist 模式,status 对它完全静音。
私有包若漏配 "type": "package" 或没声明 "source",即使你本地有 Git 仓库也无效;git checkout . 或 git clean -fd 清掉工作区后,status 也会认为“没改”而跳过。
-
untracked状态表示该包不在composer.lock里却出现在vendor/中,常见于手动git clone或删了composer.json的 require 行但没清vendor - 空输出 ≠
vendor干净,只代表「所有 source 安装的包都没被改」
怎么让 composer status 真正起作用?
核心动作只有一个:把目标包切换成 source 模式。否则它就是摆设。
- 重装单个包:
composer update --prefer-source monolog/monolog - 全局强制 source(推荐):
composer config prefer-source true,会写入项目composer.json的config块 - 临时生效(CI 场景):
composer install --prefer-source或composer update --prefer-source
注意:改完配置后必须重装包,旧的 dist 包不会自动转 source;且系统 PATH 中必须有 git 命令,否则 fallback 到 dist。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
看到 modified 后,怎么快速定位改了啥?
composer status -v 只列路径,不显示 diff 内容。真要看改动,得进包目录用 Git:
- 先用
composer status -v确认包名和路径,比如输出monolog/monolog modified (src/Logger.php) - 然后
cd vendor/monolog/monolog,再运行git diff HEAD --stat看改动概览,或git diff看完整差异 - 一行脚本查所有 modified 包的简略状态(Linux/macOS):
composer status | grep "modified" | cut -d' ' -f1 | xargs -I{} sh -c 'echo "\n=== {} ==="; cd vendor/{} && git status -s 2>/dev/null'
别依赖 composer status 输出格式做自动化判断——加 -v 后字段顺序可能变,适合人眼扫,不适合解析。
它能代替文件完整性校验吗?
不能。composer status 不校验文件内容是否匹配 composer.lock 记录的 dist.shasum 或 commit,也不监控 vendor 变更。你手动改了 vendor/symfony/console/Command.php,它不会报错、不会提醒、也不会自动还原。
真正想确认 vendor 是否干净,得靠:
• git status --ignored=matching -s vendor/(前提是 vendor/ 在 .gitignore 里)
• 或删掉出问题的包目录(如 rm -rf vendor/my/package),再 composer install 重拉——别用 composer update my/package,它可能升级版本。
最常被忽略的一点:status 的检测机制完全依赖 Git 工作区状态,而非文件内容比对。它不关心你删了一行还是加了一百行,只看 git status -s 是否非空。

















