作曲家自动加载器可以拥有不存在的 require-dev 类吗?



我正在为自己的类使用Composer自动加载器。

我也在使用PHPUnit,所以我的composer.json有这个:

"require-dev": { "phpunit/phpunit": ">=3.5" },

这意味着我的作曲家自动加载器文件支持 PHPUnit 类。当我想运行测试时,这对我来说很棒。

到目前为止,我已经避免提交提及所有 PHPUnit 文件的自动加载器文件版本。然而,这在开发过程中被证明是相当痛苦的,因为我不得不在两个版本的自动加载器文件之间切换。

只是提交它们可以吗?

运行composer install --no-dev将在部署到生产环境的过程中省略任何require-dev包。所以 PHPUnit 代码将不存在。

到目前为止,

我一直避免提交自动加载器的版本 包含所有 PHPUnit 文件的文件。然而,这是 事实证明,开发过程中相当痛苦,因为我不得不不断切换 在两个版本的自动加载器文件之间。

只是提交它们可以吗?

如果我理解正确,那么您想将部件(vendor/composer)或整个供应商文件夹提交到您的存储库,对吗?

这将使开发团队中的每个人都变得复杂,因为 供应商文件夹中的覆盖,当他们使用 Composer 运行依赖项更新(包括自动加载重新生成)时,以及由于拉取时可能的合并冲突。

我的建议是:不要这样做!保持您的存储库没有供应商文件夹!

提交composer.lock并使用composer install

当开发人员获取您的存储库时,它附带时没有供应商文件夹 他要做的第一件事是通过运行composer install来获取依赖项。

现在,为了确保团队的每个开发人员都获取具有完全相同版本的依赖项,您可以/应该提交composer.lock文件。 Composer 的运行速度也会快一些,因为它可以跳过依赖项解析和版本查找,因为信息已经在锁定文件中。


更新

当我在requirerequire-dev回答你的问题时,我忘了提到还有两个自动加载部分autoload有一个autoload-dev.

"autoload" : {
"psr-4": {
"Application\": "src/"
}
},
"autoload-dev": {
"psr-4": {
"Application\Tests\": "tests/"
}
},

参考资料: https://getcomposer.org/doc/04-schema.md#autoload-dev

相关内容

最新更新