不能。composer show仅显示包名、版本、描述及源地址等元信息,不解析或映射本地README文件路径,也不保证包内存在README文件。

composer show 能不能直接列出 README 文件路径
不能。composer show 只显示包名、版本、描述和源地址(如 GitHub URL),不解析或映射到本地 README.md 或 README.rst 的实际路径。它甚至不保证包里一定有 README 文件——有些包压根没提交,有些放到了子目录下。
怎么用 find + composer info 定位每个包的 README
Composer 把包解压到 vendor/ 下,结构是 vendor/{vendor-name}/{package-name}/。只要知道包名,就能拼出可能的 README 路径,再用 find 检查是否存在。
实操建议:
- 先用
composer show --format=json获取所有已安装包的完整列表(含 vendor 和 name) - 对每个包,组合路径:
vendor/{vendor}/{name}/README*,支持README.md、README.rst、readme.md等常见大小写变体 - 用
find -maxdepth 1 -iname "README*"避免误匹配子目录里的同名文件 - 注意:有些包(如
phpunit/phpunit)把 README 放在根目录;但像symfony/console这类 monorepo 子包,README 其实藏在vendor/symfony/console/下,不是vendor/symfony/symfony/
一行命令快速扫出所有存在的 README 路径
下面这个 shell 命令能直接输出每个包对应的真实 README 路径(如果存在):
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
composer show --format=json | jq -r '.[] | "\(.name) \(.version)"' | while read pkg ver; do vendor=$(echo $pkg | cut -d'/' -f1); name=$(echo $pkg | cut -d'/' -f2); path="vendor/$vendor/$name"; found=$(find "$path" -maxdepth 1 -iname "readme*" -print -quit 2>/dev/null); if [ -n "$found" ]; then echo "$pkg@$ver → $found"; fi; done
依赖说明:
- 需要
jq解析 JSON(macOS 可用brew install jq,Linux 用包管理器装) -
find的-iname处理大小写,-quit防止一个包匹配多个 README(比如同时有README.md和README.md.bak) - 路径拼接严格按 Composer 实际安装结构,不依赖
composer info的source字段(那个字段常指向远程仓库,不是本地路径)
为什么不用 composer archive 或 vendor-dir 自定义路径
因为 composer archive 打包时会重新拉取源码,不反映当前 vendor/ 中的真实文件状态;而 vendor-dir 如果被自定义过(比如设成 lib/vendor),上面的脚本只需改一处路径前缀,但很多人会忽略这个配置,直接硬编码 vendor/ 导致找不到任何结果。
更隐蔽的问题是:某些包通过 install-path 自定义了安装位置(比如 Laravel 的 laravel/framework 可能被移到 vendor/laravel/framework/src/Illuminate/Foundation),这种情况下 README 很可能根本不在包根目录——得看它的 composer.json 里有没有 extra.installer-paths 配置。

















