我是composer
的新手,我想知道require
和require-dev
之间的区别。
作曲家网站没有很好地解释这两者之间的区别。
我没有得到的部分是来自Composer Official Docs.
的Lists packages required for developing this package, or running tests, etc.
答案 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包。