require和require-dev有什么区别?
我是新来的composer ,我想知道require和require-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依赖项。
因此,如果您在YourProject的require-dev列表中有phpunit ,并且将YourProject克隆下来,并在您的yourproject/目录中运行composer install ,那么Composer会将phpunit安装到您的yourproject/vendor/ ,因为这可能是我在YourProject 。 作为开发的一部分,我可能会想运行YourProject的testing套件,为此我需要phpunit 。
但是,如果我将YourProject添加为MyProject的依赖项,则安装myproject包也会安装yourproject包, 但不会安装phpunit 。
您可以使用--dev和--no-dev 选项覆盖此行为,但默认行为取决于相关软件包是否是根包 。