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

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

我没有得到的部分是作曲家官方文件。中的Lists packages required for developing this package, or running tests, etc.

76858 次浏览

在我看来很清楚:

需要

列出该包所需的包。包裹将不会 除非满足这些要求,否则安装。< / p >

< em > require-dev(根)< / em >

列出开发此包所需的包 (1),或运行测试, 等。只会安装根包的开发需求 如果install使用--dev运行,或者update不使用--no-dev运行

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


1. 用于开发包的包

require-dev包是项目的不是必要的工作包和项目的生产版本包含的不应该包。

通常情况下,这些是诸如phpunit/phpunit之类的包,您只能在开发过程中使用它们。

关键的区别是Composer只会为“根包”安装require-dev依赖项——你运行composer install的目录。的文档将其描述为:

根包是由composer.json在 项目的根目录。它是主要的composer.json定义你的 项目需求。< / p >

require-dev文档指定它是“仅根目录”。

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

因此,如果你在志愿者项目require-dev列表中有phpunit,并且我克隆了志愿者项目并在yourproject/目录中运行composer install, Composer将安装phpunityourproject/vendor/,因为我很可能在志愿者项目上执行一些发展。作为开发的一部分,我可能想要运行志愿者项目的测试套件,为此我需要phpunit

但是,如果我添加志愿者项目作为MyProject的依赖项,安装myproject包将同时安装yourproject包,即但是它不会安装phpunit

可以--dev--no-dev 选项重写此行为,但默认行为是基于所关心的包是否是根包