跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

为什么我的 require-dev 依赖在生产环境也被安装了?

生产环境安装了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 会安装所有依赖 当你执行: composerinstall Composer 会读取
composer.lock
文件并安装 全部依赖 ,包括
"require"
和
"require-dev"
中的内容。这在本地开发时是正常的,但在生产环境就可能导致问题。 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 等)如果没特别指定
--no-dev
,就会默认安装所有依赖。请检查你的部署脚本,确保生产构建命令类似: 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 和环境区分清楚 有时候开发者误在生产服务器上运行了
composer update
或本地的
install
命令,导致 dev 包被装上。建议: 生产环境只运行
composer install
(基于 lock 文件) 绝不运行
composer update
使用
COMPOSER_ENV=production
环境变量 配合脚本判断(部分项目支持) 基本上就这些。只要记住:生产环境部署一定要加
--no-dev
,否则 Composer 默认啥都装。不复杂但容易忽略。

相关文章