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


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中文网其它相关文章!


# laravel  # git  # composer  # github  # app  # 工具  # php  # 线上  # 哈尔滨seo 优帮云  # 如何为网站做优化服务呢  # 扬子江营销推广中心招聘  # 灵武数字化网站推广员  # 如何将  # 如何用  # 如何解决  # 说明了  # 如何正确  # 什么时候  # 本书  # 重构  # 如何使用  # 区别  # gitlab  # ai  # 企业网站seo优化操作方法  # 合肥保洁服务网站建设  # 连云港雅虎seo  # 欧拉营销推广方案设计  # s公司网站建设电话  # 绥德网站建设案例 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 豆包AI怎样为教育场景定制答疑逻辑_为教育场景定制豆包AI答疑逻辑方案【方案】  PPT页面尺寸怎么修改 PPT自定义幻灯片大小与方向设置【教程】  《蓝色星原:旅谣》坐骑获取攻略  抖音如何解除|直播|权限绑定_抖音关闭并解绑|直播|功能的方法  Linux如何优化系统启动流程_Linux启动项优化方案  Windows 11怎么删除恢复分区_Windows 11使用Diskpart命令强行删除分区  蛙漫2(台版)正版官网 2025免费网页版分享  《绿竹漫游》关闭消息通知方法  composer licenses 命令:如何检查项目依赖的许可证?  以下哪一个是适应长期护理制度发展而设立的新职业  LINUX怎么查看显卡信息_LINUX查看GPU状态  mysql如何限制远程访问_mysql远程访问限制方法  热血江湖归来医师加点攻略  蜻蜓FM如何设置移动流量播放  Yandex俄罗斯搜索引擎官网入口 Yandex网页端直接访问  AO3官方镜像链接 | 最新防走失网址永久收藏  《图怪兽》退出登录方法  windows10怎么开启卓越性能_windows10电源选项代码激活  虫虫助手如何更新游戏  江苏大剧院会员卡购买步骤  Django模型动态关联检查:高效管理复杂关系  荣耀 Magic10 Pro 系统更新提示失败_荣耀 Magic10 Pro 升级修复  广州地铁app准妈咪徽章领取方法  苹果手机手电筒无法开启  CodeIgniter 3 中基于 MySQL 数据高效生成动态图表教程  Word 2003字体大小设置方法  传统曲艺莲花落的表演形式是  《小黑盒》删除历史浏览方法  Python中对象引用与链表属性赋值的机制解析  米侠浏览器插件无法启用怎么办 米侠浏览器扩展兼容性修复  睡觉时心跳快是什么原因 夜间心悸如何应对  快递优选如何查优选物流_快递优选专属物流渠道查询与配送时效  Win11便笺在哪打开 Win11桌面便笺(Sticky Notes)使用方法【详解】  小米civi如何设置锁屏时间  《小宇宙》标记不友善评论方法  淘口令快速解析技巧  XPath动态元素定位:如何精准选择文本内容变化的元素  《杖剑传说》食谱大全  家里的小飞虫总是不断,用什么方法可以彻底根除?  Windows Audio服务启动失败怎么办_电脑没声音的终极服务修复法【修复】  Python项目中的条件导入:解决跨模块依赖问题  使用Selenium在无头Chrome中交互动态菜单和复选框的策略  解决C#跨线程访问XML对象的异常 安全的并发XML处理模式  Pydantic 中“schema”字段命名冲突的解决方案  Lar*el如何创建自定义的辅助函数(Helpers)_Lar*el全局函数定义与加载方法  学习通网页版课程打不开_课程无法访问时的解决方法  盲鳗善于分泌黏液猜猜主要用来做什么  店铺如何关联视频号推广?视频号推广有什么用?  猫眼电影app如何参与官方的抽奖活动_猫眼电影官方抽奖参与方法  铁路12306官网入口 铁路12306中国铁路官网登录首页 

 2025-12-14

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.