这个问题在这里已经有了答案:composer.json 中的 require 和 require-dev 部分有什么区别? (6 个回答) 4 年前关闭。
我是 composer
的新手,我想知道 require
和 require-dev
之间的区别。作曲家网站没有很好地解释这两者之间的区别。
我没有得到的部分是来自 Composer Official Docs. 的 Lists packages required for developing this package, or running tests, etc.
require-dev
包是对您的项目运行来说不是必需的包,并且不应包含在您的生产版本中项目。
通常,这些是您只会在开发期间使用的包,例如 phpunit/phpunit
。
主要区别在于 Composer 只会为“根包”安装 require-dev
依赖项 - 您运行 composer install
的目录。 The documentation 将其描述为:
根包是 composer.json 在你的项目根目录下定义的包。它是定义项目需求的主要 composer.json。
…并且 require-dev
documentation 指定它是“仅根”。
在实践中,这意味着如果包被安装为其他东西的依赖项(即它被安装到另一个项目的 vendor
文件夹),则不使用包的 require-dev
依赖项。
因此,如果您在 YourProject 的 require-dev
列表中有 phpunit
,我克隆 YourProject 并在 yourproject/
目录中运行 composer install
,Composer 将安装phpunit
到 yourproject/vendor/
,因为我可能正在 YourProject 上进行一些开发。作为开发的一部分,我可能想要运行 YourProject 的测试套件,为此我需要 phpunit
。
但是,如果我将 YourProject 添加为 MyProject 的依赖项,安装 myproject
包也会安装 yourproject
包,但不会安装phpunit
。
您可以使用 --dev
和 --no-dev
options 覆盖此行为,但默认行为取决于相关包是否为 根包。
对我来说似乎很清楚:
require 列出此包所需的包。除非满足这些要求,否则不会安装该软件包。 require-dev (root-only) 列出开发这个包 (1) 或运行测试等所需的包。根包的 dev 要求只有在 install 使用 --dev 运行或 update 没有运行时才会安装--没有开发。
http://getcomposer.org/doc/04-schema.md
1. 用于开发包的包
composer.json
文件中提供的包,例如 "require-dev": { // this package('s) }
--dev
运行安装时才会安装根包的开发要求……”这已在链接文档中更改为:“根包的开发要求默认安装。”上述摘录已过时。
不定期副业成功案例分享
require-dev
?composer install
的包安装“开发”依赖项(作曲家称之为“根包”),但不为作为依赖项安装的其他包安装。require-dev
中有包是否会让 Composer 在composer update|require
上抱怨require
中的包?