讲师中心 微信公众号
AI工具推荐 视频效率加速

为何我的Composer库不应该在require中包含测试框架_Composer库开发中devDependencies的最佳实践

云静酱_7412

云静酱_7412

发布时间:2025-12-05 16:29:32

|

623人浏览过

|

来源于php中文网

原创

不应该将测试框架放入require中。运行依赖应与开发依赖分离,PHPUnit等工具必须置于require-dev,避免污染用户环境、引发冲突或增加冗余;主流PHP库均遵循此实践,通过autoload-dev配置测试命名空间,并在CI中正确安装dev依赖;发布时确保不提交vendor目录,使用非dev构建验证兼容性;同时在README中提供贡献指南,明确测试执行方式,如通过composer test运行,保障开发体验与生产纯净性。

为何我的composer库不应该在require中包含测试框架_composer库开发中devdependencies的最佳实践

开发一个Composer库时,是否在require中引入测试框架(如PHPUnit),是一个常见的设计决策问题。答案很明确:不应该。你的库的require部分应只包含运行时必需的依赖,而测试框架属于开发期工具,应放在require-dev中。

1. 区分运行依赖与开发依赖

require 中的包是你的库运行所必需的。任何使用你库的项目都会自动安装这些依赖。require-dev 则仅用于本地开发、测试、构建等场景,不会被下游项目加载。

测试框架如 PHPUnit 只在你写单元测试时需要,用户的项目运行你的库时完全不需要它。如果把它放在 require 中,会导致:

  • 用户项目无端多出不必要的依赖
  • 可能引发版本冲突或安全扫描误报
  • 增大部署体积,降低安装效率

2. 遵循 Composer 社区最佳实践

所有主流 PHP 库(如 Symfony 组件、Laravel 包)都将 PHPUnit 放在 require-dev 中。这是社区共识,也是 Packagist 和框架文档推荐的方式。

你的 composer.json 应该类似这样:

"require-dev": { "phpunit/phpunit": "^9 || ^10" }, "autoload-dev": { "psr-4": { "YourLibrary\Tests\": "tests/" } }

这样,开发者贡献代码时可以通过 composer install 安装测试工具,而使用者通过 composer require your/library 时不会拉取任何测试相关组件。

Feishu calendar sync, local ics to json data for AI agent
Feishu calendar sync, local ics to json data for AI agent

将ICS日历文件转为JSON格式,用于飞书日历导入导出及数据集成。

下载

3. 正确发布库,避免泄露 dev 依赖

当你发布库到 Packagist,Composer 默认只会读取 require 来确定依赖。但如果你在 CI 或构建流程中操作不当,可能间接影响用户体验。

确保:

  • 不将 vendor/ 提交到版本控制
  • CI 测试时运行 composer install --dev
  • 生产构建或静态分析环境使用非 dev 安装方式验证兼容性

4. 提供清晰的贡献指南

虽然测试框架不在主依赖中,但你仍需让其他开发者能顺利运行测试。在 README 中添加开发说明:

Contributing: Run tests with: composer test Ensure you have installed dev dependencies first.

并在 scripts 中定义:

"scripts": { "test": "phpunit" }

基本上就这些。把测试框架留在 require-dev,是对使用者负责,也是专业库开发的基本素养。简单却关键。

热门AI工具

更多
超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

相关专题

更多
PHP Symfony框架
PHP Symfony框架

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

5177

2025.09.11

laravel组件介绍
laravel组件介绍

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

857

2024.04.09

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

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

835

2024.04.09

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

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

2468

2024.04.09

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

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

3861

2024.04.10

laravel入门教程
laravel入门教程

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

5490

2025.08.05

laravel实战教程
laravel实战教程

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

3656

2025.08.05

laravel面试题
laravel面试题

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

6889

2025.08.05

Kratos框架HTTP与gRPC服务开发教程
Kratos框架HTTP与gRPC服务开发教程

本专题围绕Kratos框架双协议服务开发,涵盖HTTP路由与处理器编写、参数获取、gRPC服务实现与客户端调用、metadata上下文传递、encoding编解码注册、统一响应封装、超时控制与流式响应实现方法。

0

2026.10.10

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
墨刀帮助中心
墨刀帮助中心

共0课时 | 0人学习

MyEclipse学习中心
MyEclipse学习中心

共0课时 | 0人学习

Apache Subversion 官方手册
Apache Subversion 官方手册

共0课时 | 0人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn