composer show 无法查“最近安装”,它只显示当前 vendor/ 和 composer.lock 的快照;可靠方法只有 git diff composer.lock 或查看 shell 历史。

composer show 不能查“最近安装”,它只反映当前状态
很多人以为 composer show 能看到“刚装的包”或“安装时间”,其实它只是读取 vendor/ 目录和 composer.lock 的当前快照,不记录任何时间戳或操作历史。你运行 composer install 或 composer require foo/bar 后,composer show 显示的仍是最终结果,而非变更过程。
-
composer show输出的是“现在有什么”,不是“刚才装了什么” - Composer 本身不维护安装日志文件(如
install.log),也不写入系统日志 - 如果你没手动记日志、没开 shell 历史记录,就无法回溯“上一条 composer 命令是什么”
查“最近装了啥”的真实可行办法:看 composer.lock 变更
Composer 的真实安装行为都固化在 composer.lock 里——每次成功执行 composer install 或 composer update,这个文件都会被重写。所以“最近装了哪些包”,本质是比对两次 composer.lock 的差异。
- 用
git diff composer.lock(如果你用 Git 管理项目)能立刻看出新增、升级或移除的包及其版本 - 若没 Git,可提前备份:执行
cp composer.lock composer.lock.before,再运行composer require xxx,最后用diff composer.lock.before composer.lock -
composer.lock中的packages和packages-dev区块列出了所有已安装包;新增条目即为“最近安装”
临时补救:从 shell 历史里捞命令
如果刚执行完安装但忘了记,最快的办法是翻终端命令历史——Composer 没日志,但你的 shell 有。
- Linux/macOS:运行
history | grep composer或直接按↑键往上翻 - Windows PowerShell:用
Get-History | Where-Object { $_.CommandLine -match "composer" } - 注意:
composer require会同时修改composer.json和composer.lock,而composer install只读composer.lock,两者行为不同,别混淆
想自动记录?得自己加钩子
Composer 不提供原生安装日志功能,但可通过脚本+事件钩子实现简易记录。
- 在
composer.json的scripts里加一条:"post-update-cmd": "date >> composer-install.log && echo 'update' >> composer-install.log" - 配合
post-require-cmd钩子,可以 echo 包名到日志(需写简单 shell 脚本) - 注意:钩子只在当前项目生效,且不会捕获
composer global require这类全局操作
composer show 或某个隐藏命令——它根本不存在。可靠路径只有两条:看 composer.lock 的 git diff,或者翻 shell 历史。其他所谓“日志插件”或第三方工具,底层也都是在做这两件事的封装。










