新闻中心

Composer中的require和require-dev如何正确使用?(场景分析)

2025-12-14
浏览次数:
返回列表
require 是运行时必需依赖,require-dev 仅用于开发测试;误放会导致线上崩溃或冗余安装;判断标准是代码是否直接使用该包类/命名空间。

composer中的require和require-dev如何正确使用?(场景分析)

require 和 require-dev 的核心区别在于:前者是项目运行时必需的依赖,后者仅在开发、测试或构建阶段需要。用错会导致线上环境出问题,或者本地开发无法启动。

什么时候该写进 require

项目上线后,代码实际执行时离不开的包,必须放 require。

  • 框架核心(如 lar*el/frameworksymfony/http-kernel
  • 数据库驱动(如 doctrine/dbalilluminate/database
  • HTTP 客户端(如 guzzlehttp/guzzle,只要你的业务代码调用了它)
  • 模板引擎(如 twig/twig,只要控制器渲染了 twig 模板)

判断标准很简单:删掉这个包,项目启动报错关键功能直接失效,就属于 require。

什么时候该放进 require-dev

只在你写代码、跑测试、生成文档或优化构建时才用得上的工具,全归 require-dev。

  • 测试工具(如 phpunit/phpunitpestphp/pest
  • 代码质量工具(如 phpstan/phpstanfriendsofphp/php-cs-fixer
  • 本地开发辅助(如 barryvdh/lar*el-debugbarlar*el/sail
  • 文档生成器(如 phpdocumentor/phpdocumentor

部署到生产环境时,通常会加 --no-dev 参数(例如 composer install --no-dev),这些包就不会被安装,既节省空间又减少安全面。

常见误用场景和后果

把本该在 require 的包错放 require-dev,最典型的就是“本地能跑,上线就炸”:

《PHP设计模式指南》中文版 《PHP设计模式指南》中文版

《PHP设计模式》首先介绍了设计模式,讲述了设计模式的使用及重要性,并且详细说明了应用设计模式的场合。接下来,本书通过代码示例介绍了许多设计模式。最后,本书通过全面深入的案例分析说明了如何使用设计模式来计划新的应用程序,如何采用PHP语言编写这些模式,以及如何使用书中介绍的设计模式修正和重构已有的代码块。作者采用专业的、便于使用的格式来介绍相关的概念,自学成才的编程人员与经过更多正规培训的编程人员

《PHP设计模式指南》中文版 341 查看详情 《PHP设计模式指南》中文版
  • monolog/monolog 放 require-dev → 日志功能在生产环境彻底消失,错误无声无息
  • ramsey/uuid 放 require-dev → 生成 UUID 的逻辑抛 ClassNotFound 异常
  • 反过来,把 phpunit/phpunit 放 require → 生产环境多装几十 MB 无用代码,还可能引入额外漏洞

Composer 不会自动校验语义合理性,一切靠开发者判断。建议每次加新包前,先问一句:这个类/命名空间,我的 app.php 或 index.php 会直接 new 或 use 吗?

协作与 CI/CD 中的注意事项

团队项目里,require-dev 不只是“我本地用”,它也影响 CI 流程:

  • GitHub Actions 或 GitLab CI 的测试 job 必须运行 composer install(不带 --no-dev),否则 PHPUnit 找不到
  • 但部署 job 必须用 composer install --no-dev --optimize-autoloader
  • 如果某个 dev 包其实被生产代码间接依赖(比如通过 trait 或接口实现),说明设计已有隐患,应重构或移入 require

可以定期执行 composer show --dev 检查 require-dev 列表,确认没有“混进来”的 runtime 依赖。

基本上就这些。不复杂但容易忽略,关键是分清“运行时”和“开发时”的边界。

以上就是Composer中的require和require-dev如何正确使用?(场景分析)的详细内容,更多请关注php中文网其它相关文章!


# 并在  # shopify怎么做seo  # 南雄营销网站建设  # 长春seo推广优化  # 济宁网站建设的知识  # 网站如何推广发帖子赚钱  # 网站整体推广方案设计  # 营销推广时间轴图片模板  # 推广优化网站排名  # 廊坊石家庄网站建设  # 谷歌搜索引擎 seo  # 如何使用  # 如何解决  # 说明了  # 线上  # php  # 如何正确  # 什么时候  # 本书  # 重构  # 如何在  # 区别  # gitlab  # ai  # 工具  # app  # github  # composer  # git  # laravel 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 如何为你的Composer包编写自动化测试_集成PHPUnit到Composer的scripts工作流  俄罗斯Yandex搜索引擎入口_Yandex官网免登录一键访问  必由学官网快捷入口 必由学网页版在线学习平台  Django表单验证失败时保留用户输入数据的最佳实践  win11 arm版怎么安装 M1/M2 Mac虚拟机安装ARM win11的方法  html怎么在cmd下运行php文件_cmd运行html中php文件方法【教程】  从OpenAI API响应中高效提取生成文本  Go语言HTML解析:利用Goquery精准获取指定元素内容  Go语言中对Map值调用带指针接收者方法:原理与最佳实践  J*aScript井字棋(Tic-Tac-Toe)核心交互逻辑实现教程  AI抖音网页版免费视频入口 AI抖音网页端最新视频实时观看  Go语言中的*string:深入理解字符串指针  steam官方入口大全 steam账号注册及操作指南  夸克浏览器网页版最新地址 夸克浏览器官方入口合集  Win11网速慢怎么解决 Win11网络设置优化解除限速  126邮箱账号注册 电脑版登录入口  KFC游戏互动怎么赢取优惠券_KFC线上游戏活动参与与优惠代码赢取教程  J*aScript DOM操作:高效清空列表元素的策略与实践  Yandex搜索引擎官方地址 俄罗斯网络世界的主要入口  Python异步编程实践:使用Binance API构建实时交易数据流  c++如何实现一个简单的ECS框架_c++数据驱动设计与游戏开发  押井守高度称赞《辐射4》:玩了八年都停不下来!  Win10磁盘清理工具在哪 Win10打开并使用磁盘清理【教程】  4399体育竞技小游戏_4399小游戏赛事入口  c++如何实现单例设计模式_c++线程安全的单例模式写法  Spyder启动失败:字体文件权限拒绝错误解决方案  Windows10怎么开启夜间模式 Windows10系统设置调整色温与亮度缓解夜间用眼疲劳【教程】  将HTML Canvas内容转换为可上传的图像文件(File对象)  Win11怎么查看电脑配置_Win11硬件配置检测工具使用  Python自定义类排序:解决lambda键值访问TypeError的实践指南  妖精漫画网页版登录入口免费_妖精漫画官网主页直接阅读漫画  谷歌google账号怎么注册账号 谷歌账号注册官方流程  德邦快递查询平台 德邦快递物流信息查询入口  小米Civi 4录制视频过暗_小米Civi 4亮度优化  格力空气能E5故障代码是什么情况_格力空气能E5代码解析与应对措施  虫虫漫画精品漫画官网_虫虫漫画精品漫画官网进入精品漫画  抖音创作助手登录入口_抖音创作辅助工具官网直达  win11 Snap Layouts怎么用 Win11窗口布局与分屏多任务高效指南【必学】  知乎APP怎么管理已购盐选内容_知乎APP盐选内容购买记录与查看方法  谷歌邮箱注册显示错误Gmail服务器异常与延迟处理  海量存储:机器视觉智能化的核心基石  生成rdflib自定义SPARQL函数:参数匹配与实践指南  Shopware订单对象中获取产品自定义字段的正确方法  抖音从哪里进入网页版_抖音官方入口链接  解决深度学习模型训练初期异常高损失与完美验证准确率问题  优化 Jest 模拟:强制未实现函数抛出错误以提升测试效率  win11怎么查看应用耗电情况 Win11电池设置查看应用能耗排行榜【优化】  c++ 命名空间怎么用 c++ namespace使用指南  抖音未来赚钱的新趋势 2025年值得关注的变现风口分析  J*aScript实现单选按钮与关联输入框的联动禁用教程 

搜索