生产环境安装了require-dev依赖是因为缺少–no-dev参数。执行composer install时默认会安装全部依赖,包括开发工具;部署时应使用composer install –no-dev –optimize-autoloader命令,并在CI/CD脚本中明确指定该参数,避免将phpunit等开发包部署到线上,同时禁止运行composer update,确保基于composer.lock进行可预测的依赖安装。

如果你发现 require-dev 依赖在生产环境也被安装了,很可能是因为你运行 composer install 时没有正确使用 --no-dev 参数,或者 CI/CD 部署流程中缺少这个关键配置。
1. 默认情况下 Composer 会安装所有依赖
当你执行:
composer install
Composer 会读取 composer.lock 文件并安装 全部依赖,包括 "require" 和 "require-dev" 中的内容。这在本地开发时是正常的,但在生产环境就可能导致问题。
2. 生产环境应使用 –no-dev 参数
在部署到生产环境时,你应该明确告诉 Composer 不要安装开发依赖:
composer install –no-dev –optimize-autoloader
- –no-dev:跳过 require-dev 中的包(如 phpunit、phpstan、faker 等)
- –optimize-autoloader:优化类自动加载,提升性能
3. 检查你的部署脚本或 CI/CD 配置
很多自动化部署流程(如 gitHub Actions、gitlab CI、jenkins、Capistrano 等)如果没特别指定 --no-dev,就会默认安装所有依赖。请检查你的部署脚本,确保生产构建命令类似:
composer install –no-dev –prefer-dist –optimize-autoloader –classmap-authoritative
尤其是 laravel、symfony 等框架项目,生产环境不需要测试工具或代码分析组件。
4. 确保 .env 和环境区分清楚
有时候开发者误在生产服务器上运行了 composer update 或本地的 install 命令,导致 dev 包被装上。建议:
- 生产环境只运行
composer install(基于 lock 文件) - 绝不运行
composer update - 使用
COMPOSER_ENV=production环境变量配合脚本判断(部分项目支持)
基本上就这些。只要记住:生产环境部署一定要加 --no-dev,否则 Composer 默认啥都装。不复杂但容易忽略。