0

0

composer.json中require和require-dev区别_composer配置说明【指南】

穿越時空

穿越時空

发布时间:2026-02-07 12:58:52

|

906人浏览过

|

来源于php中文网

原创

require 是运行必需依赖,--no-dev 时仍安装;require-dev 仅开发使用,--no-dev 时完全不装。autoload 全环境生效,autoload-dev 仅开发启用。运行时依赖误放 require-dev 会导致线上崩溃。

composer.json中require和require-dev区别_composer配置说明【指南】

require 和 require-dev 的安装行为差异

运行 composer install 时,默认会同时安装 requirerequire-dev 下的包;但执行 composer install --no-dev(常见于生产环境部署)时,require-dev 里的依赖**完全不会被下载或加载**,而 require 中的包始终生效。

这意味着:require 是项目运行所必需的依赖(比如 "monolog/monolog": "^2.0"),缺了就报 Class not foundrequire-dev 只服务于开发流程(比如 "phpunit/phpunit": "^9.5"),不参与线上逻辑执行。

autoload 和 autoload-dev 的对应关系

autoload 块定义的命名空间映射,在所有环境下都生效,供运行时自动加载;而 autoload-dev 仅在开发环境下启用——它通常用来注册测试类、示例代码或命令行工具的类路径,避免污染生产 autoloader。

常见误操作是把测试工具类写进 autoload,结果上线后多加载一堆无用文件,拖慢响应。正确做法:

  • 业务核心类 → 放 autoload"psr-4""classmap"
  • Tests/ 目录、Fixtures/、Commands/(非 runtime)→ 放 autoload-dev
  • 若某类既被测试调用又被业务调用,必须挪到 autoload,否则生产环境找不到

require-dev 里放运行时依赖的后果

把本该在 require 中声明的包(如 "symfony/console")错放到 require-dev,会导致:

WOMBO
WOMBO

使用AI创作美丽的艺术品

下载
  • CI/CD 流水线用 --no-dev 构建失败,抛出 Class 'Symfony\Component\Console\Application' not found
  • 本地开发正常,但线上容器启动即崩,排查时容易忽略 composer.json 配置粒度
  • IDE 或静态分析工具可能因环境不一致给出错误提示

判断依据很简单:该包是否出现在你写的任何 new XXX()use XXX 或框架配置中?如果是,就必须进 require

如何安全地迁移依赖到 require-dev

不是所有开发工具都适合直接扔进 require-dev。需确认三点:

  • 该包是否只在命令行执行(如 phpstan/phpstan)、测试阶段(如 mockery/mockery)或构建环节(如 ocramius/package-versions)使用?
  • 它的代码是否**从未被应用代码直接引用**?检查 grep -r "use.*package-name" .grep -r "new PackageName" .
  • 它是否通过 Composer 插件机制注入(如 dealerdirect/phpcodesniffer-composer-installer)?这类插件必须保留在 require,否则 composer install 阶段就失效

一个常被忽略的点:某些包(如 roave/security-advisories)虽不提供运行时代码,但属于“元约束”,必须放在 require 才能触发版本冲突拦截——放错位置等于关掉安全闸门。

热门AI工具

更多
DeepSeek
DeepSeek

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

豆包大模型
豆包大模型

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

通义千问
通义千问

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

腾讯元宝
腾讯元宝

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

文心一言
文心一言

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

讯飞写作
讯飞写作

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

即梦AI
即梦AI

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

ChatGPT
ChatGPT

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

相关专题

更多
PHP Symfony框架
PHP Symfony框架

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

82

2025.09.11

composer是什么插件
composer是什么插件

Composer是一个PHP的依赖管理工具,它可以帮助开发者在PHP项目中管理和安装依赖的库文件。Composer通过一个中央化的存储库来管理所有的依赖库文件,这个存储库包含了各种可用的依赖库的信息和版本信息。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

158

2023.12.25

json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

431

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

542

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

314

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

79

2025.09.10

require的用法
require的用法

require的用法有引入模块、导入类或方法、执行特定任务。想了解更多require的相关内容,可以阅读本专题下面的文章。

470

2023.11.27

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

404

2023.07.18

Golang处理数据库错误教程合集
Golang处理数据库错误教程合集

本专题整合了Golang数据库错误处理方法、技巧、管理策略相关内容,阅读专题下面的文章了解更多详细内容。

39

2026.02.06

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 11.2万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.2万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

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

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