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
选项覆盖此行为,但默认行为取决于相关软件包是否是根包 。