生产环境安装了require-dev依赖是因为缺少--no-dev参数。执行composer install时默认会安装全部依赖,包括开发工具;部署时应使用composer install --no-dev --optimize-autoloader命令,并在CI/CD脚本中明确指定该参数,避免将phpunit等开发包部署到线上,同时禁止运行composer update,确保基于composer.lock进行可预测的依赖安装。
如果你发现
require-dev
依赖在生产环境也被安装了,很可能是因为你运行
时没有正确使用
参数,或者 CI/CD 部署流程中缺少这个关键配置。
1. 默认情况下 Composer 会安装所有依赖
当你执行:
composerinstall
Composer 会读取
文件并安装
全部依赖
,包括
和
中的内容。这在本地开发时是正常的,但在生产环境就可能导致问题。
2. 生产环境应使用 --no-dev 参数
在部署到生产环境时,你应该明确告诉 Composer 不要安装开发依赖:
composer install --no-dev --optimize-autoloader
--no-dev
:跳过 require-dev 中的包(如
php
unit、phpstan、faker 等)
--optimize-autoloader
:优化类自动加载,提升性能
3. 检查你的部署脚本或 CI/CD 配置
很多自动化部署流程(如 GitHub Actions、GitLab CI、Jenkins、Capistrano 等)如果没特别指定
,就会默认安装所有依赖。请检查你的部署脚本,确保生产构建命令类似:
PHP 8.5.5
PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。
下载
composer install --no-dev --prefer-dist --optimize-autoloader --classmap-authoritative
尤其是 Laravel、Symfony 等框架项目,生产环境不需要测试工具或代码分析组件。
4. 确保 .env 和环境区分清楚
有时候开发者误在生产服务器上运行了
或本地的
命令,导致 dev 包被装上。建议:
生产环境只运行
(基于 lock 文件)
绝不运行
使用
环境变量
配合脚本判断(部分项目支持)
基本上就这些。只要记住:生产环境部署一定要加
,否则 Composer 默认啥都装。不复杂但容易忽略。
composer install--no-devcomposer.lock"require""require-dev"--no-devcomposer updateinstallcomposer installcomposer updateCOMPOSER_ENV=production--no-dev