require和require-dev有什么区别?

时间:2013-05-21 21:14:00

标签: php installation composer-php

我是composer的新手,我想知道requirerequire-dev之间的区别。 作曲家网站没有很好地解释这两者之间的区别。

我没有得到的部分是来自Composer Official Docs.

Lists packages required for developing this package, or running tests, etc.

3 个答案:

答案 0 :(得分:207)

require-dev个软件包是不是的软件包,您的项目必须 包含在生产您项目的版本。

通常,这些是phpunit/phpunit之类的包,您只能在开发期间使用。

答案 1 :(得分:52)

对我来说似乎很清楚:

  

需要

     

列出此软件包所需的软件包。包裹不会   安装,除非可以满足这些要求。

     

require-dev(仅限root)

     

列出开发此软件包所需的软件包 (1)或运行测试,   只安装root包的开发者要求   如果使用--dev运行安装,或者如果没有--no-dev运行更新。

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


1。用于开发包的包

答案 2 :(得分:36)

关键的区别在于Composer只会为“root package”(运行require-dev的目录)安装composer install个依赖项。 The documentation将此描述为:

  

root包是由composer.json定义的包   你的项目的根。主要composer.json定义了您的。{1}}   项目要求。

...而require-dev documentation指定它是“仅限root”。

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

因此,如果 YourProject phpunit列表中有require-dev,我将克隆 YourProject 并运行composer install in在yourproject/目录中,Composer会将phpunit安装到yourproject/vendor/,因为我可能正在 YourProject 上进行一些开发。作为开发的一部分,我可能想要运行 YourProject 的测试套件,为此我需要phpunit

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

可以使用--dev--no-dev options覆盖此行为,但默认行为取决于相关的包是否为 root包