最直接有效的瘦身方式是使用 composer install --no-dev;再叠加 --prefer-dist 和 --optimize-autoloader 可进一步减小体积,因 dist 为压缩包安装而 source 会克隆完整 git 仓库。

composer install 时怎么跳过 dev 依赖减小体积
只装生产环境需要的包,是最直接有效的瘦身方式。dev 依赖比如 phpunit、larastan、symfony/var-dumper 在线上根本用不到,却常占几 MB 到几十 MB。
- 加
--no-dev参数:运行composer install --no-dev或composer update --no-dev - 确保
COMPOSER_NO_DEV环境变量没被意外设为0(它优先级高于命令行参数) - CI/CD 中推荐写成
composer install --no-dev --prefer-dist --optimize-autoloader,三者叠加效果更明显
为什么 --prefer-dist 比 --prefer-source 更省空间
dist 是压缩包安装,source 是 Git 克隆整个仓库(含 .git 目录、历史记录、测试文件等),后者体积通常是前者的 3–10 倍。
- 默认行为已是
--prefer-dist,但某些私有源或配置可能覆盖它 - 检查
composer.json是否有"preferred-install": {"*": "source"}这类全局设置 - 私有 Packagist 服务若未开启 dist 包生成,
--prefer-dist会自动 fallback 到 source,此时要联系运维补 dist 支持
composer create-project 安装 Laravel 时如何避免带 demo 数据和测试文件
Laravel 官方 skeleton 默认包含 tests/、database/factories/、public/storage 符号链接等非运行必需内容,这些在部署时纯属冗余。
- 加
--remove-vcs:删掉所有.git目录,省下大量空间 - 加
--no-scripts:跳过post-root-package-install等脚本,防止自动生成 demo 资源 - 安装后手动删
tests/、vendor/bin/phpunit(如果没用)、database/seeders/(除非真用)
哪些依赖本身“体积刺客”,值得单独处理
有些包下载体积不大,解压后膨胀严重,或者带大量二进制资源——它们不会因为 --no-dev 自动消失,得主动干预。
-
symfony/console本身轻量,但若项目里用了symfony/web-server-bundle(已弃用)或laravel/sail,会拖入 Docker 镜像、Shell 脚本等非 PHP 内容 -
guzzlehttp/guzzle的tests/和src/Exception/下大量空接口文件虽不占磁盘,但 autoloader 扫描路径变长,影响性能 - 用
composer remove替代注释掉require-dev:注释不生效,composer install仍会装;必须真正删掉或用replace规则屏蔽
真正卡住体积的往往不是单个大包,而是 dev 依赖链+source 模式+未清理的构建产物。上线前跑一遍 du -sh vendor/,再对比 composer show --installed --platform 输出,能快速定位谁在悄悄吃磁盘。










