composer show 命令本身不支持中文输出,其依赖信息完全依赖包的英文 name 和 description 字段;导出中文需手动映射或借助外部工具(如 composer-chinese-map.txt)配合 awk 脚本处理。

composer show 命令本身不支持中文输出
Composer 的 composer show 和 composer depends 等命令输出依赖信息时,完全依赖包的 name 和 description 字段原始值——这些字段在 Packagist 上绝大多数是英文。所谓“导出为中文文本”,实际是指:**手动映射关键包名到中文含义,或借助外部工具补充说明**,而非 Composer 自带功能。
常见错误现象:composer show --tree 输出一堆英文包名(如 monolog/monolog、symfony/console),直接重定向到文件(composer show --tree > deps.txt)仍是英文,无法满足中文文档或团队协作需求。
- 真正可行路径是:先用
composer show --tree导出结构化依赖树,再用脚本或表格工具做「包名→中文描述」映射 - 若项目中已定义中文注释(例如在
composer.json的scripts或extra字段里加了说明),可写小脚本提取并合并 - 注意
--tree默认只显示当前项目 require 的顶层包及其递归依赖;加-a才包含 require-dev 依赖
用 grep + awk 快速生成带中文注释的依赖树文本
不需要额外 PHP 脚本,Linux/macOS 终端一条命令链就能把基础依赖树转成带中文标签的文本文件:
composer show --tree | \
awk '{
indent = match($0, /^ */);
pkg = $1;
if (pkg ~ /^[a-z0-9\-_]+\/[a-z0-9\-_]+$/) {
# 查找本地映射表(格式:vendor/package → 中文名)
cmd = "grep -w \"" pkg "\" composer-chinese-map.txt 2>/dev/null | cut -d'→' -f2";
cmd | getline desc;
close(cmd);
print substr($0, 1, indent) pkg " " (desc ? "(" desc ")" : "");
} else {
print $0;
}
}' > deps-zh.txt使用前提:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 提前准备一个
composer-chinese-map.txt,每行形如monolog/monolog → 日志记录库、symfony/event-dispatcher → 事件分发组件 - 该文件只需覆盖你关心的核心包,不必穷举全部(全量依赖可能超 200+ 包)
-
awk脚本会保留原始缩进层级,确保树形结构可读
分析组件关系时,别只盯着依赖方向
单纯看 composer show --tree 容易误判调用关系。比如 laravel/framework 依赖 symfony/http-foundation,但实际业务代码可能直接 new 了后者——这种「显式使用」不会出现在 Composer 树里,却影响升级风险。
- 用
composer depends --tree some/package可反查谁依赖某包,这对下线旧组件或替换日志库很实用 - 运行
composer why-not vendor/package:version能定位阻止升级的具体冲突包(比手动翻composer.lock高效得多) - 注意:某些包通过
replace或provide声明虚拟包(如psr/log),它们不出现在树中,但实际被其他包 require
导出结果用于文档时,要过滤 dev-only 依赖
生产环境部署不需要知道 phpunit/phpunit 或 friendsofphp/php-cs-fixer 的依赖链。导出前务必区分场景:
- 生成线上部署文档:用
composer show --tree --no-dev,避免混入开发工具链 - 做安全审计:加
--outdated参数,配合映射表快速标出哪些中文组件需升级(如 “JWT 认证库(firebase/php-jwt)→ 已有新版”) - 注意
composer.lock中的packages-dev字段是真实 dev 依赖来源,--no-dev不影响 lock 文件本身,只控制 show 输出
真正麻烦的是跨语言映射维护——包名和版本变动频繁,composer-chinese-map.txt 得随项目演进持续更新,否则导出的“中文文本”很快失真。

















