Composer自动加载器是否可以使用require-dev中不存在的类?

时间:2016-06-15 05:27:40

标签: composer-php

我在我的项目中使用Composer自动加载器为我自己的类。

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

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

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

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

提交它们可以吗?

2 个答案:

答案 0 :(得分:0)

  

到目前为止,我已经避免提交自动加载器的版本   提及所有PHPUnit文件的文件。但是,这是   因为我不得不转换,所以证明了发展的痛苦   在两个版本的自动加载器文件之间。

     

提交它们可以吗?

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

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

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

提交composer.lock并使用composer install

当开发人员获取您的存储库时,它会在没有vendor文件夹的情况下发布 他要做的第一件事就是通过运行composer install来获取依赖关系。

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

<强>更新

虽然我在requirerequire-dev上提出要解决您的问题,但我忘了提及自动加载还有两个部分autoload有一个autoload-dev。< / p>

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

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

答案 1 :(得分:0)

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