256

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

我没有得到的部分Lists packages required for developing this package, or running tests, etc.来自Composer Official Docs。

4

3 回答 3

249

这些require-dev包是项目运行所不需要的包,不应包含在项目的生产版本中。

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

于 2015-03-27T15:27:54.033 回答
56

对我来说似乎很清楚:

要求

列出此包所需的包。除非满足这些要求,否则不会安装该软件包。

需要开发(仅限根)

列出开发此包 (1)或运行测试等所需的包。根包的 dev 要求仅在 install 运行时安装--dev或更新运行时不安装--no-dev

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


1. 用于开发包的包

于 2013-05-21T21:18:04.300 回答
56

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

根包是composer.json项目根目录下定义的包。它是composer.json定义项目需求的主要部分。

…并且require-dev文档指定它是“仅根”。

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

因此,如果您phpunitYourProjectrequire-dev的列表中,并且我克隆了YourProject并在目录中运行,Composer 将安装到,因为我可能正在对YourProject进行一些开发。作为开发的一部分,我可能想要运行YourProject的测试套件,并且为此我需要.composer installyourproject/phpunityourproject/vendor/phpunit

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

可以--dev使用and--no-dev 选项覆盖此行为,但默认行为基于相关包是否为根包

于 2016-04-01T04:23:02.807 回答