我是新手composer
,我想知道 和 之间的require
区别require-dev
。作曲家网站没有很好地解释这两者之间的区别。
我没有得到的部分Lists packages required for developing this package, or running tests, etc.
来自Composer Official Docs。
我是新手composer
,我想知道 和 之间的require
区别require-dev
。作曲家网站没有很好地解释这两者之间的区别。
我没有得到的部分Lists packages required for developing this package, or running tests, etc.
来自Composer Official Docs。
这些require-dev
包是项目运行所不需要的包,不应包含在项目的生产版本中。
通常,这些是phpunit/phpunit
您只会在开发期间使用的包。
对我来说似乎很清楚:
要求
列出此包所需的包。除非满足这些要求,否则不会安装该软件包。
需要开发(仅限根)
列出开发此包 (1)或运行测试等所需的包。根包的 dev 要求仅在 install 运行时安装
--dev
或更新运行时不安装--no-dev
。
http://getcomposer.org/doc/04-schema.md
1. 用于开发包的包
关键的区别是 Composer 只会安装require-dev
“根包”的依赖项——你运行的目录composer install
。该文档将其描述为:
根包是
composer.json
项目根目录下定义的包。它是composer.json
定义项目需求的主要部分。
…并且require-dev
文档指定它是“仅根”。
在实践中,这意味着require-dev
如果包被安装为其他东西的依赖项(即它被安装到另一个项目的vendor
文件夹),则不使用包的依赖项。
因此,如果您phpunit
在YourProjectrequire-dev
的列表中,并且我克隆了YourProject并在目录中运行,Composer 将安装到,因为我可能正在对YourProject进行一些开发。作为开发的一部分,我可能想要运行YourProject的测试套件,并且为此我需要.composer install
yourproject/
phpunit
yourproject/vendor/
phpunit
但是,如果我将YourProject添加为MyProject的依赖项,安装myproject
包也会安装yourproject
包,但不会安装phpunit
。
您可以--dev
使用and--no-dev
选项覆盖此行为,但默认行为基于相关包是否为根包。