0

0

Composer.json中require-dev区别_Composer开发依赖配置指南【规范】

冰火之心

冰火之心

发布时间:2026-02-20 10:32:02

|

480人浏览过

|

来源于php中文网

原创

require 中的包是项目运行时必需的,删掉会导致 http 请求或业务逻辑失败;require-dev 中的包仅用于开发、测试、构建等阶段,上线后不参与运行,执行 composer install --no-dev 时会被跳过。

composer.json中require-dev区别_composer开发依赖配置指南【规范】

require-dev 和 require 的根本区别在哪

区别不在“要不要装”,而在“什么时候装、给谁用”。require 里的包是项目运行时必需的,比如 monolog/monolog 用于日志;require-dev 里的包只在开发阶段需要,比如 phpunit/phpunitfriendsofphp/php-cs-fixer,上线后完全不参与运行。

关键判断标准:删掉这个包,项目还能不能正常响应 HTTP 请求、处理业务逻辑?能——就该放 require-dev;不能——必须进 require

  • 执行 composer install --no-dev 时,require-dev 内容会被跳过,生成的 vendor/ 更轻量
  • composer update 默认同时更新 requirerequire-dev,但 CI 流水线常加 --no-dev 防止测试工具污染生产环境
  • 如果把 phpunit 放进 require,部署时会多下几十 MB 无用代码,还可能引入非预期的 autoloader 冲突

哪些工具必须塞进 require-dev

不是“开发者用的”就自动归类,而是看它是否参与构建、测试、检查流程,且不暴露给运行时代码。常见误放点:把 doctrine/orm 的命令行工具当成 dev 工具,其实它是运行时 ORM 的一部分,必须放 require

  • phpunit/phpunitpestphp/pest:纯测试执行器,不被业务代码 use,只在 ./vendor/bin/phpunit 调用
  • phpstan/phpstanpsalm/phar:静态分析工具,仅本地或 CI 中执行,不 autoload 到应用中
  • symfony/var-dumper:虽然常被 dump() 调用,但它本身是调试辅助,线上应禁用;若项目依赖其 Cloner 类做序列化,就得挪到 require
  • laravel/pintphp-cs-fixer:代码格式化工具,只在 pre-commit 或 CI 中触发,和运行时零耦合

require-dev 里混进 runtime 依赖的典型错误现象

最常踩的坑:某个包在 require-dev 里,但你的 src/ 文件直接 use 它的类,甚至调用它的方法——上线跑 composer install --no-dev 后,直接 Class not found

Musho
Musho

AI网页设计Figma插件

下载

错误示例:require-dev 里有 fakerphp/faker,但你在 Entity 构造函数里写了 new Faker\Generator()。这等于把假数据生成逻辑写进了业务模型,违反了依赖边界。

  • 现象:本地 php artisan test 正常,但部署后访问首页报 Class 'Faker\Generator' not found
  • 查法:用 composer show --dev 确认包是否真在 require-dev;再 grep 全局搜索该类名是否出现在 src/app/
  • 修复:要么把包移到 require(仅当它确属运行时依赖),要么重构代码——把 fake 数据逻辑抽到测试专用 factory 类里,业务代码不碰它
  • 注意:autoload-dev 字段只影响自动加载路径,不改变依赖安装时机;它不能“救活”一个本该在 require 的包

CI/CD 中 require-dev 的实际开关策略

CI 脚本里别无脑写 composer install。不同阶段要明确意图:单元测试需完整 require-dev,打包镜像则必须剔除。

  • GitHub Actions 示例:
    run: composer install --no-interaction --prefer-dist --no-suggest
    → 缺少 --no-dev,导致测试工具打进生产镜像
  • 推荐分两步:
    测试阶段:用 composer install(默认含 dev)
    构建阶段:用 composer install --no-dev --optimize-autoloader
  • 如果你用 composer.lock 提交,要注意:即使某包只在 require-dev,它仍会记录在 lock 文件里;但 --no-dev 会跳过安装,lock 中的版本不会生效
  • 小陷阱:composer dump-autoload --optimize 在 dev 模式下会包含 autoload-dev 的路径,但线上运行时若没装 dev 包,这些路径就是无效的——所以线上务必用 --no-dev + --optimize-autoloader 一起跑

真正难的是厘清“这个类到底算不算运行时依赖”。很多人靠直觉放错位置,结果上线才暴露。与其反复修,不如每次加包前问一句:它会不会被 index.php 或控制器直接调用?

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
PHP Symfony框架
PHP Symfony框架

本专题专注于PHP主流框架Symfony的学习与应用,系统讲解路由与控制器、依赖注入、ORM数据操作、模板引擎、表单与验证、安全认证及API开发等核心内容。通过企业管理系统、内容管理平台与电商后台等实战案例,帮助学员全面掌握Symfony在企业级应用开发中的实践技能。

85

2025.09.11

laravel组件介绍
laravel组件介绍

laravel 提供了丰富的组件,包括身份验证、模板引擎、缓存、命令行工具、数据库交互、对象关系映射器、事件处理、文件操作、电子邮件发送、队列管理和数据验证。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

332

2024.04.09

laravel中间件介绍
laravel中间件介绍

laravel 中间件分为五种类型:全局、路由、组、终止和自定。想了解更多laravel中间件的相关内容,可以阅读本专题下面的文章。

287

2024.04.09

laravel使用的设计模式有哪些
laravel使用的设计模式有哪些

laravel使用的设计模式有:1、单例模式;2、工厂方法模式;3、建造者模式;4、适配器模式;5、装饰器模式;6、策略模式;7、观察者模式。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

621

2024.04.09

thinkphp和laravel哪个简单
thinkphp和laravel哪个简单

对于初学者来说,laravel 的入门门槛较低,更易上手,原因包括:1. 更简单的安装和配置;2. 丰富的文档和社区支持;3. 简洁易懂的语法和 api;4. 平缓的学习曲线。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

381

2024.04.10

laravel入门教程
laravel入门教程

本专题整合了laravel入门教程,想了解更多详细内容,请阅读专题下面的文章。

131

2025.08.05

laravel实战教程
laravel实战教程

本专题整合了laravel实战教程,阅读专题下面的文章了解更多详细内容。

81

2025.08.05

laravel面试题
laravel面试题

本专题整合了laravel面试题相关内容,阅读专题下面的文章了解更多详细内容。

69

2025.08.05

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

776

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WEB前端教程【HTML5+CSS3+JS】
WEB前端教程【HTML5+CSS3+JS】

共101课时 | 9.4万人学习

JS进阶与BootStrap学习
JS进阶与BootStrap学习

共39课时 | 3.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号