composer 不支持原生中文界面和安装提示,post-create-project-cmd 仅在 create-project 时生效,require 场景需用 post-install-cmd + 文件标记实现单次提示,locale 配置无效,应专注理解高频英文错误术语。

Composer 本身不支持安装提示和中文界面,所谓“个性化提示”和“中文配置”都是外部机制在起作用,不是 Composer 原生能力。强行配置反而容易引发兼容问题或 CI 失败。
post-create-project-cmd 不能用于 require 场景
很多人想在自己发布的包里加 post-create-project-cmd,让别人 composer require vendor/my-package 时看到提示——这完全无效。
-
post-create-project-cmd只在composer create-project执行完毕后、于新项目根目录中触发 - 它必须定义在「模板项目」的
composer.json里,而不是你的包自己的composer.json - 执行时当前工作目录是新项目,不是你的包所在路径,无法可靠访问你的包内资源
- 如果你的包被 require 进已有项目,这个钩子根本不会运行
想给 require 行为加提示?用 post-install-cmd + 文件标记
真正可行的方式是把提示逻辑塞进主项目的 post-install-cmd,并加判断避免重复输出:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 在项目根目录的
composer.json中添加:"scripts": { "post-install-cmd": [ "php -r "if (!file_exists('vendor/.my-package-installed')) { file_put_contents('vendor/.my-package-installed', '1'); fprintf(STDERR, '\n\033[32m✔ my-package installed. Check docs at https://example.com\n\033[0m'); }"" ] } - 用
fprintf(STDERR, ...)而不是echo,确保在 CI 环境下也能看到(stdout 可能被静默) - 写入
vendor/.my-package-installed是为了只提示一次;删掉这个文件后再次composer install会再触发 - 不要依赖
composer show --format=json vendor/my-package判断——它在首次 install 时可能还查不到
Composer 命令行没有中文界面,别折腾 locale 配置
试图通过 composer global config locale zh_CN 或 export LANG=zh_CN.UTF-8 让 Composer 输出变中文,基本无效。
- Composer 源码里没有中文翻译文件,
vendor/composer/lang/zh_CN/在 2.7.x 版本中几乎全为空 -
locale配置项只影响极少数硬编码文案(如部分 help 提示),不影响 install 日志、错误信息、进度条等主体输出 - 系统
LANG环境变量对 Composer 自身输出无实际作用;它不调用setlocale(),也不走 gettext 流程 - 看到繁体中文?大概率是装了
csineneo/lang-traditional-chinese插件——卸载它:composer remove csineneo/lang-traditional-chinese,再composer clear-cache
最稳妥的做法:放弃提示和翻译,专注错误含义理解
真正影响效率的从来不是语言,而是对关键英文术语的条件反射:
-
Your requirements could not be resolved→ 不是“无法解决”,而是依赖版本锁死了互斥组合 -
Class not found出现在dump-autoload后 → 很可能是autoload配置里路径写错,不是类名问题 -
Failed to clone git@...→ SSH 密钥没配好,和语言完全无关 - 所有这些词在日志里高频出现,看五次就比任何翻译都准;加一层翻译反而模糊了
locked和lock file这类关键概念










