新闻中心
Composer 中的 require 和 require-dev 有什么本质区别?
本质区别在于使用场景和安装时机:require是运行必需依赖,所有环境都安装;require-dev仅开发测试时需要,生产环境用--no-dev跳过。

本质区别在于使用场景和安装时机不同:require 是项目运行必需的依赖,必须存在于所有环境;require-dev 是仅在开发、测试阶段需要的工具类依赖,生产环境默认不装。
require:上线就靠它
这些包是应用启动和运行的基石。没有它们,代码根本跑不起来。
- 框架本身(如 Lar*el、Symfony、Yii2)
- 数据库操作层(如 doctrine/orm、illuminate/database)
- 核心 SDK(如 aliyuncs/oss-sdk-php、wechat/php-sdk)
- 日志、缓存、HTTP 客户端等运行时组件(如 monolog/monolog、guzzlehttp/guzzle)
执行 composer install 或 composer update 时,它们一定会被安装,且会随项目一起部署到生产服务器。
require-dev:只在你写代码时帮忙
这些包不参与业务逻辑,只服务开发流程,比如写测试、查 bug、规范代码。
- 测试框架:phpunit/phpunit、pestphp/pest
- 代码质量工具:phpstan/phpstan、friendsofphp/php-cs-fixer
- 调试辅助:yiisoft/yii2-debug、symfony/var-dumper
- 生成器与模拟器:fakerphp/faker、mockery/mockery
它们只在你本地或 CI 环境中用 composer install(不加参数)时才装。上线前加 --no-dev 就彻底跳过,既省空间又少风险。
Procys
AI驱动的发票数据处理
102
查看详情
autoload 和实际加载也跟着区分
composer 自动生成的 vendor/autoload.php 会注册 require 和 require-dev 的自动加载规则——但前提是那些包真的存在。
- 如果你用 --no-dev 部署,require-dev 的包没装,对应类文件就不存在
- 如果代码里不小心 new 了一个 PHPUnit 类,线上就会报 Class not found
- 所以别在业务逻辑中引用 dev 工具类,哪怕 autoloader 看似支持
谁来决定装不装?看是不是“根项目”
require-dev 只对当前项目的 composer.json(即“根包”)生效。
- 你在自己的项目里加了 phpunit 到 require-dev,运行 composer install 就会装进 vendor/
- 但如果别人把你这个项目当依赖引入他的项目,他的 composer install 不会装你的 require-dev
- 也就是说,require-dev 不会“传染”,只服务于本项目开发
基本上就这些。不复杂但容易忽略细节。
以上就是Composer 中的 require 和 require-dev 有什么本质区别?的详细内容,更多请关注php中文网其它相关文章!
# 里加
# 贵阳营销网站seo优化
# 汉口网站seo优化怎么做效果好
# 和平区全网营销推广
# 株洲抖音关键词搜索排名推广
# 农产品营销推广诚信企业
# 网站推广获客服务商是什么
# 市场营销专业化推广方向
# 网站平台推广运营方案
# 怎么写完善seo
# 杭州网站建设优化标题
# 器中
# 故障排除
# 装进
# 自己的
# 跳过
# composer
# 会报
# 只在
# 如何在
# 有什么
# 模拟器
# 区别
# iis
# 工具
# yii
# json
# js
# laravel
# php
# require
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
Surface怎么安装系统 微软Surface Pro U盘重装win11教程
Lar*el Form Request中唯一性验证在更新操作中的正确实现
PHP中高效并行检查多链接状态的教程
mc.js免安装版 mc.js一键畅玩入口
PHP高效扁平化嵌套数组:使用array_merge与数组解包操作符
优化Django表单:提交验证失败后保留用户输入
QQ官网正版登录链接 QQ在线登录入口最新
铁路12306改签能改到更早的车次吗_铁路12306改签提前车次规则
c++如何实现一个简单的ECS框架_c++数据驱动设计与游戏开发
Golang如何使用bytes.Split分割字节切片_Golang bytes切片分割方法
NetBeans Ant项目:自动化将资源文件复制到dist目录的教程
SteamMachine定价或为699美元 大家想入手吗?
css滚动动画效果怎么实现_使用Animate.css滚动触发动画类
win11如何卸载Windows更新补丁 Win11解决更新导致系统不稳定的问题【修复】
mcjs网页版流畅运行 mcjs低配电脑畅玩入口
Discord Slash 命令响应超时问题的异步解决方案
Golang如何通过reflect获取匿名字段方法_Golang reflect匿名字段方法访问技巧
印象笔记如何设提醒任务防漏执行_印象笔记设提醒任务防漏执行【任务提醒】
JUnit5/Mockito:优雅测试内部依赖与异常处理的实践
飞书妙记怎样用语音转文字速记_飞书妙记用语音转文字速记【速记方法】
html怎么在cmd下运行php文件_cmd运行html中php文件方法【教程】
Angular中父组件异步更新子组件复选框状态的实践指南
C++如何实现一个智能指针_手动实现C++ shared_ptr的引用计数功能
Node.js CSV 数据处理:基于字段空值条件过滤整条记录的策略
Windows7怎么硬盘安装 Windows7提取ISO镜像到非系统盘并运行setup.exe实现硬盘直装【教程】
excel怎么制作工资条 excel快速生成工资条的方法
高德地图公交到站提醒失败如何解决 高德提醒权限设置
必由学网页版入口 必由学官方平台直接访问
今日头条怎么同步内容到抖音_今日头条内容同步到抖音教程
MongoDB聚合管道:正确匹配对象数组中_id的方法
解决Python单元测试中Mock异常方法调用计数为零的问题
怎么去除衣服上的口红印_生活小妙招教你用酒精轻松擦除
c++中的std::basic_string的SSO优化_c++短字符串优化深度解析
抖音网页版怎么|直播|_抖音网页版开播操作指南
微信商城在哪里打开【步骤】
J*aScript数组对象转换:按指定键分组与值收集
必由学在线入口 必由学网页版快速登录入口
FullCalendar 自定义按钮样式定制指南
如何创建独立于主系统的J*a运行环境_隔离式环境搭建策略
J*aScript 字符串标签转换:使用正则表达式高效替换
必由学官方网站入口 必由学学生教师共用登录通道
excel如何生成目录 excel一键生成工作表目录超链接
J*aScript中正确使用querySelectorAll与复杂CSS选择器
Win11蓝牙耳机断连怎么解决 Win11蓝牙设置重新配对与驱动更新【技巧】
2026春节假期时间安排 2026春节假日查询
荒野行动PC版怎么注册_荒野行动PC版账号注册详细流程图文教程
《噬血代码2》新预告片发布 展示游戏剧情
QQ邮箱电脑版登录入口_QQ邮箱官方网站登录平台
解决深度学习模型训练初期异常高损失与完美验证准确率问题
vivo手机互传视频怎么操作_vivo手机互传视频详细传输方法


2025-12-12
浏览次数:次
返回列表