我是composer的新手,我想知道require和require-dev之间的区别。 作曲家网站并没有很好地解释这两者之间的区别。< / p >
composer
require
require-dev
我没有得到的部分是作曲家官方文件。中的Lists packages required for developing this package, or running tests, etc.
Lists packages required for developing this package, or running tests, etc.
在我看来很清楚:
需要 列出该包所需的包。包裹将不会 除非满足这些要求,否则安装。< / p > < em > require-dev(根)< / em > 列出开发此包所需的包 (1),或运行测试, 等。只会安装根包的开发需求 如果install使用--dev运行,或者update不使用--no-dev运行
需要
列出该包所需的包。包裹将不会 除非满足这些要求,否则安装。< / p >
< em > require-dev(根)< / em >
列出开发此包所需的包 (1),或运行测试, 等。只会安装根包的开发需求 如果install使用--dev运行,或者update不使用--no-dev运行
--dev
--no-dev
http://getcomposer.org/doc/04-schema.md
1. 用于开发包的包
require-dev包是项目的不是必要的工作包和项目的生产版本包含的不应该包。
通常情况下,这些是诸如phpunit/phpunit之类的包,您只能在开发过程中使用它们。
phpunit/phpunit
关键的区别是Composer只会为“根包”安装require-dev依赖项——你运行composer install的目录。的文档将其描述为:
composer install
根包是由composer.json在 项目的根目录。它是主要的composer.json定义你的 项目需求。< / p >
composer.json
require-dev文档指定它是“仅根目录”。
在实践中,这意味着如果包作为其他东西的依赖项安装(即安装到另一个项目的vendor文件夹),则包的require-dev依赖项不会被使用。
vendor
因此,如果你在志愿者项目的require-dev列表中有phpunit,并且我克隆了志愿者项目并在yourproject/目录中运行composer install, Composer将安装phpunit到yourproject/vendor/,因为我很可能在志愿者项目上执行一些发展。作为开发的一部分,我可能想要运行志愿者项目的测试套件,为此我需要phpunit。
phpunit
yourproject/
yourproject/vendor/
但是,如果我添加志愿者项目作为MyProject的依赖项,安装myproject包将同时安装yourproject包,即但是它不会安装phpunit。
myproject
yourproject
你可以用--dev和--no-dev 选项重写此行为,但默认行为是基于所关心的包是否是根包。