真正能删掉 vendor 里中文文档的唯一可靠方案是使用 vaimo/composer-cleaner 插件,在 post-install-cmd/post-update-cmd 阶段清理;archive.excludes 和 exclude-from-classmap 对 vendor 中文目录完全无效,因前者仅作用于自身包归档,后者仅过滤 php 类文件且不参与安装流程。

Composer 本身没有“忽略文件”的全局开关,所谓“排除中文文档目录”,实际要分两层处理:一是你自己的项目不加载它们,二是安装后从 vendor 里删掉它们——archive.excludes 和 exclude-from-classmap 对这事完全无效。
为什么 archive.excludes 对 vendor 中文目录没用
这个配置只在你执行 composer archive 或向 Packagist 发布自己包时起作用。你在项目根目录的 composer.json 里加 "archive": {"excludes": ["/docs/", "/translations/"]},不会让 monolog/monolog 或 symfony/translation 安装时少下任何文件。
常见错误现象:vendor/symfony/translation/Resources/translations/ 里一堆 zh_CN.xlf 还在,就去改自己项目的 archive 字段——这根本不会触发任何变化。
- 它不参与
composer install流程,对第三方包的下载、解压、autoload 零影响 - 路径是相对于“当前包根目录”的,写
/translations/是指你自己的包里的目录,不是vendor下的 - 即使包作者配了
archive.excludes,也只在他们发新 tag 后生效;你本地改不了
exclude-from-classmap 能跳过中文文档自动加载吗
不能。这个字段只影响 classmap 类型的自动加载,而且前提是你的 autoload 里显式声明了 "classmap": ["src/"] 这类配置。纯 PSR-4 项目设了它基本等于没写。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
更重要的是:中文翻译文件(如 .xlf、.php)本身不是类文件,不会被 classmap 扫描到,所以排除路径对它们无意义。
- 它只过滤 PHP 文件,不碰资源文件
- 即使你把
Resources/translations/加进exclude-from-classmap,也不会阻止 Composer 把这些文件解压进vendor - 想让它生效,还得配合
composer dump-autoload -o,但依然不影响文件存在与否
真正能删掉 vendor 里中文文档的方案
唯一可靠的方式,是在 post-install-cmd 或 post-update-cmd 中运行清理命令。推荐用 vaimo/composer-cleaner 插件,比手写 rm -rf 更安全、跨平台、且不破坏 autoload 映射。
操作步骤:
- 先安装插件:
composer require --dev vaimo/composer-cleaner - 在
composer.json的extra段加规则,例如:"extra": { "cleaner": { "exclude": [ "/translations/", "/locale/", "/lang/", "/Resources/translations/", "/src/Monolog/Translator/" ] } } - 运行
composer update --lock && composer install触发清理 - 注意:路径必须写准,
/translations/不会匹配/Resources/translations/,得分开列
容易被忽略的关键点
中文语言文件不是“可选依赖”,而是资源包的一部分,--no-dev 对它们完全无效;conflict 或 replace 也不能删目录——它们只管包级别安装决策,不管包内文件。最常漏掉的是权限问题:某些 CI 环境下 vendor 目录被设为只读,unlink 失败时插件默认静默,得手动加日志或检查退出码。










