真正可控、安全、可复现的减体积方式只有两条:控制安装时下载内容(如--no-dev)或清理安装后冗余开发产物(如discard-changes、--no-autoloader);务必避免手动删vendor文件。

直接删掉 vendor 里不需要的文件是危险且不可持续的;真正可控、安全、可复现的减体积方式,只有两条路:控制安装时下载的内容,或清理安装后冗余的开发期产物。
只安装运行时必需的依赖(--no-dev)
绝大多数线上环境根本用不到 phpunit、mockery、phpstan 这类包,但默认 composer install 会把它们全拉下来。生产部署必须加 --no-dev,否则 vendor 多出 30%~60% 体积很常见。
-
composer install --no-dev是上线前必跑命令,CI/CD 流水线里漏掉它,等于白优化 -
composer update --no-dev同理,但更建议只在本地更新,再提交composer.lock,避免线上直接update - 如果项目用了
require-dev里某些包的二进制(比如php-cs-fixer),又想瘦身,得把它们挪到require或改用全局安装
禁用 VCS 元数据("discard-changes": true)
Composer 默认为每个包保留 .git 目录(用于后续 update 或 patch),这部分能占到 vendor 总体积的 15%~25%,尤其是 Laravel、Symfony 这类大仓库。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 在
composer.json的"config"段加上:"config": { "discard-changes": true } - 已有
vendor不会自动清理,需先删掉再重装:rm -rf vendor && composer install --no-dev - 副作用:之后无法对 vendor 内包做本地修改并
composer update保留改动(这本来就不该做)
跳过 autoload 生成与脚本执行(--no-autoloader + --no-scripts)
如果你只是想快速拉取代码做静态分析、打包或镜像构建,不立刻运行 PHP,可以跳过两件高开销事:生成 vendor/autoload.php 和执行 post-install-cmd 类脚本。
-
composer install --no-dev --no-autoloader --no-scripts能省下几秒时间 + 几 MB 空间(主要是 autoload 生成的composer/autoload_*.php文件) - 后续要用时,单独运行
composer dump-autoload --optimize即可补回,无需重装 - 注意:Laravel 的
php artisan package:discover就是通过post-autoload-dump触发的,跳过它会导致部分服务提供者未注册
最易被忽略的是:vendor/bin 下的二进制文件(如 phpunit、laravel)其实和源码包解压无关,它们只是软链或小包装脚本——删它们没用,真正占空间的是包本身的 src/、tests/、.git/ 和 vendor/ 嵌套依赖。盯住这三处,比事后压缩或手动删文件靠谱得多。










