require和require-dev之间的区别是什么?


What's the difference between require and require-dev?

我想知道requirerequire-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依赖项。

所以如果你在YourProjectrequire-dev列表中有phpunit,我克隆YourProject并在yourproject/目录中运行composer install, Composer将安装phpunityourproject/vendor/,因为很可能我在YourProject上做一些开发。作为开发的一部分,我可能想要运行YourProject的测试套件,为此我需要phpunit

但是,如果我添加YourProject作为MyProject的依赖项,安装myproject包将安装yourproject包以及,但它不会安装phpunit

可以使用--dev--no-dev选项覆盖此行为,但默认行为是基于所涉及的包是否是根包

我看清楚了:

需要

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

require-dev(根)

列出开发此包(1)或运行测试所需的包,等。只安装根包的dev需求

如果安装时使用--dev或者更新时不使用--no-dev
http://getcomposer.org/doc/04-schema.md


1。用于开发一个包的包