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

穿越時空
发布: 2025-12-05 16:29:32
原创
571人浏览过
不应该将测试框架放入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 时不会拉取任何测试相关组件。

Convai Technologies Inc.
Convai Technologies Inc.

对话式 AI API,用于设计游戏和支持端到端的语音交互

Convai Technologies Inc. 87
查看详情 Convai Technologies Inc.

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,是对使用者负责,也是专业库开发的基本素养。简单却关键。

以上就是为何我的Composer库不应该在require中包含测试框架_Composer库开发中devDependencies的最佳实践的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

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