最安全高效的vendor瘦身方式是执行composer install --no-dev --prefer-dist --remove-vcs重建目录,配合archive.excludes精准过滤tests/docs等非运行文件,并启用--classmap-authoritative强制类映射以关闭文件扫描。

vendor目录体积大,不是装得多,而是没裁干净
直接删tests/或docs/目录大概率会报Class not found——因为有些包(比如旧版monolog/monolog)把StreamHandler示例代码放在tests/下,autoload 映射里真写了这条路径。真正安全的清理,必须从安装源头控制文件落地,而不是事后“扫雷”。
用composer install --no-dev --prefer-dist --remove-vcs重建vendor
这是最稳、最快、CI 友好的基础组合,必须重装才生效(update不触发裁剪):
-
--no-dev:跳过require-dev所有包,省下几百 MB;检查是否误把sebastian/environment或symfony/var-dumper写进了require -
--prefer-dist:强制下载 zip 包而非 git clone;dist 包通常已剔除.git、tests/、docs/ -
--remove-vcs:兜底删掉 dist 包里残留的.git目录(某些包打包不规范,zip 里还塞了.git)
执行前先rm -rf vendor,再跑命令。别跳这步,否则已有文件不会被重写。
配置archive.excludes在解压阶段过滤
这个配置只对从 Packagist 下载的 zip 包生效,是真正删掉包内部tests/的唯一可靠方式:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 先安装插件:
composer require --dev composer-archive-excludes - 在
composer.json的config块里加:"archive": { "excludes": ["/tests/", "/docs/", "/examples/", "/.github/", "/CHANGELOG.md"] } - 之后每次
install或update,匹配路径在解压时就被跳过,根本不会落地
⚠️ 别用find vendor -name tests -type d -exec rm -rf {} +——它不看 autoload 规则,纯暴力删,极易挂。
加--classmap-authoritative让瘦身真正生效
前面所有操作都只是“删文件”,但如果不关掉 autoload 扫描,PHP 还会去遍历整个vendor/找类,哪怕tests/目录已被删,扫描失败也可能导致加载异常,尤其在容器或 NFS 环境下:
- 确保
composer.json中已设"optimize-autoloader": true - 运行:
composer dump-autoload --optimize --classmap-authoritative --no-dev - 后续
install命令带上--optimize-autoloader --classmap-authoritative,autoloader 就只认vendor/composer/autoload_classmap.php里的路径
这步不减体积,但决定了前面所有清理会不会白做。最容易被忽略的点就在这儿——删完不关扫描,等于裸奔。

















