我想知道require
和require-dev
的区别。作曲家网站并没有很好地解释这两者的区别。
我没有得到的部分是Lists packages required for developing this package, or running tests, etc.
从Composer官方文档
require-dev
包是对于您的项目来说不是必需的, 不应该包含在您的项目的生产版本中。
通常,这些是只在开发过程中使用的诸如phpunit/phpunit
之类的包。
关键的区别是,Composer只会为"根包"安装require-dev
的依赖项——你运行composer install
的目录。文档将其描述为:
根包是由
composer.json
在项目的根目录。它是主要的composer.json
,定义您的项目需求。
…并且require-dev
文档指定它是"root-only"。
在实践中,这意味着如果包被安装为其他东西的依赖(即它被安装到另一个项目的vendor
文件夹),则不使用包的require-dev
依赖项。
所以如果你在YourProject的require-dev
列表中有phpunit
,我克隆YourProject并在yourproject/
目录中运行composer install
, Composer将安装phpunit
到yourproject/vendor/
,因为很可能我在YourProject上做一些开发。作为开发的一部分,我可能想要运行YourProject的测试套件,为此我需要phpunit
。
但是,如果我添加YourProject作为MyProject的依赖项,安装myproject
包将安装yourproject
包以及,但它不会安装phpunit
。
您可以使用--dev
和--no-dev
选项覆盖此行为,但默认行为是基于所涉及的包是否是根包。
我看清楚了:
需要http://getcomposer.org/doc/04-schema.md列出此包所需的包。这个包裹不会安装,除非这些要求可以满足。
require-dev(根)
列出开发此包(1)或运行测试所需的包,等。只安装根包的dev需求
如果安装时使用--dev
或者更新时不使用--no-dev
。
1。用于开发一个包的包