2021-12-14 08:14:40
在 Composer 中,require 和 require-dev 均用于声明项目依赖,但二者在用途、作用范围及部署影响上有显著区别,具体如下:
核心区别require
用途:包含项目运行的核心组件,如框架(Laravel)、数据库 ORM(Eloquent)、缓存库(Redis)等。
作用范围:所有环境(开发、测试、生产)均需安装。
示例:"require": { "monolog/monolog": "^2.0" // 日志记录库,生产环境必需}
require-dev
用途:包含开发辅助工具,如测试框架(PHPUnit)、代码检查工具(PHPStan)、调试工具(Xdebug)等。
作用范围:仅开发或测试阶段安装,生产环境排除。
示例:"require-dev": { "phpunit/phpunit": "^9.0" // 测试工具,生产环境无需}
require
依赖包会随项目部署到生产服务器,确保应用正常运行。
若缺少这些依赖,应用可能抛出错误或无法启动。
require-dev
默认情况下,运行 composer install 会安装所有依赖(包括 require-dev)。
生产环境部署时,需通过命令 composer install --no-dev 排除开发依赖,避免:
体积膨胀:减少不必要的包,降低部署文件大小。
安全风险:避免暴露开发工具(如调试工具)到生产环境。
require 的典型包
框架核心:laravel/framework
数据库交互:doctrine/dbal
HTTP 客户端:guzzlehttp/guzzle
require-dev 的典型包
测试工具:phpunit/phpunit、pestphp/pest
代码检查:phpstan/phpstan、squizlabs/php_codesniffer
模拟工具:mockery/mockery、fakerphp/faker
以下是一个典型的 composer.json 片段,展示二者的使用:
{ "require": { "monolog/monolog": "^2.0", // 生产环境必需的日志库 "illuminate/database": "^10.0" // 生产环境必需的数据库组件 }, "require-dev": { "phpunit/phpunit": "^9.0", // 仅开发测试用的测试框架 "phpstan/phpstan": "^1.0" // 仅开发用的静态分析工具 }}生产环境部署:运行 composer install --no-dev 后,仅安装 monolog/monolog 和 illuminate/database,排除 phpunit/phpunit 和 phpstan/phpstan。
开发环境:直接运行 composer install,安装所有依赖,方便调试和测试。