require和require-dev有什么区别?

我是新来的composer ,我想知道requirerequire-dev之间的区别。 composer php网站并没有提供很好的解释这两者之间的区别。

我没有得到的部分是Lists packages required for developing this package, or running tests, etc.从Composer官方文档中 Lists packages required for developing this package, or running tests, etc.

require-dev软件包是您的项目require-dev软件包, 应该包含在项目的生产版本中。

通常情况下,这些软件包如phpunit/phpunit ,可用于unit testing您的项目。

对我来说似乎很清楚:

要求

列出这个包所需的包。 除非满足这些要求,否则不会安装该软件包。

require-dev(仅限根)

列出开发这个软件包 (1)或者运行testing等所需的软件包。只有在使用--dev运行安装或者在没有--no-dev情况下运行更新时, --dev安装根软件包的开发需求。

http://getcomposer.org/doc/04-schema.md


1.用于开发软件包的软件包

关键的区别在于Composer将只安装“根包”(运行composer install的目录)的require-dev依赖项。 文档描述如下:

根包是由您的项目根目录下的composer.json定义的包。 这是定义您的项目需求的主要composer.json

…和require-dev文档指定它是“仅根”的。

在实践中,这意味着如果软件包被安装为其他东西的依赖项(即,它被安装到另一个项目的vendor文件夹),则不会使用该软件包的require-dev依赖项。

因此,如果您在YourProjectrequire-dev列表中有phpunit ,并且将YourProject克隆下来,并在您的yourproject/目录中运行composer install ,那么Composer会将phpunit安装到您的yourproject/vendor/ ,因为这可能是我在YourProject 。 作为开发的一部分,我可能会想运行YourProject的testing套件,为此我需要phpunit

但是,如果我将YourProject添加为MyProject的依赖项,则安装myproject包也会安装yourproject包, 但不会安装phpunit

可以使用--dev--no-dev 选项覆盖此行为,但默认行为取决于相关软件包是否是根包