我开始使用作曲家,我对它知之甚少,对网络应用程序开发有一点经验。
我只是走过Nettuts+ Tutorial,所以我对作曲家有基本的疑问。
{
"require": {
"laravel/framework": "4.0.*",
"way/generators": "dev-master",
"twitter/bootstrap": "dev-master",
"conarwelsh/mustache-l4": "dev-master"
},
"require-dev": {
"phpunit/phpunit": "3.7.*",
"mockery/mockery": "0.7.*"
},
"autoload": {
"classmap": [
"app/commands",
"app/controllers",
"app/models",
"app/database/migrations",
"app/database/seeds",
"app/tests/TestCase.php"
]
},
"scripts": {
"post-update-cmd": "php artisan optimize"
},
"minimum-stability": "dev"
}
答案 0 :(得分:67)
通常,软件将在不同的环境中运行:
development
testing
staging
production
在require
的{{1}}部分中声明的依赖项通常是在
composer.json
staging
环境,而production
部分中声明的依赖项通常是
require-dev
developing
环境。
例如,除了用于实际运行应用程序的软件包之外,可能还需要软件包来开发软件,例如:
testing
(检测并修复编码样式问题)friendsofphp/php-cs-fixer
(检测并修复编码样式问题)squizlabs/php_codesniffer
(使用测试推动开发)现在,在phpunit/phpunit
和development
环境中,您通常会运行
testing
安装$ composer install
和production
个依赖项。
但是,在development
和staging
环境中,您只想安装运行应用程序所需的依赖项,并且作为部署过程的一部分,您通常会运行
production
仅安装$ composer install --no-dev
个依赖项。
换句话说,部分
production
require
在运行
时向require-dev
表明应安装哪些软件包
composer
或
$ composer install
就是这样。
注意您的应用程序或程序包所依赖的程序包的开发依赖性永远不会被安装
供参考,见:
答案 1 :(得分:56)
require-dev(仅限root)
列出开发此软件包或运行测试等所需的软件包。默认情况下会安装root软件包的开发人员要求。
install
或update
都支持阻止安装dev依赖项的--no-dev
选项。
因此,运行composer install
也将下载开发依赖项。
原因其实很简单。在为特定库做贡献时,您可能希望运行测试套件或其他开发工具(例如symfony)。但是,如果将此库安装到项目中,则可能不需要这些开发依赖项:并非每个项目都需要测试运行器。
答案 2 :(得分:18)
来自作曲家网站(很明显)
要求#
列出此软件包所需的软件包。包裹不会 安装,除非可以满足这些要求。
require-dev(root-only)#
列出开发此软件包或运行测试所需的软件包, 通过安装根包的开发需求 默认。安装或更新都支持--no-dev选项 防止安装dev依赖项。
在Composer中使用require-dev,您可以声明开发/测试项目所需的依赖项,但在生产中不需要。当您将项目上传到生产服务器时(使用git)require-dev
部分将被忽略。
答案 3 :(得分:1)
需要部分 本节包含的软件包/依赖项是生产环境中安装/需要的更好的选择。
require-dev部分:此部分包含开发人员可用于测试其代码的包/依赖项(or for the experiment purpose on her local machine and she wants these packages should not be installed on the production environment.)
答案 4 :(得分:0)
一般规则是,您只希望在开发(dev)环境(例如本地环境)中从 require-dev 部分获得软件包。
require-dev 部分中的软件包是可帮助您调试应用程序,运行测试等的软件包。
在登台和生产环境中,您可能只需要 require 部分中的软件包。
但是无论如何,您可以在任何环境上运行 composer install --no-dev 和 composer update --no-dev ,该命令将仅安装中的软件包不是来自 require-dev 的“必需” 部分,但是您可能只想在非本地的登台和生产环境中运行此文件。
理论上,您可以将所有软件包放在 require 部分中,但不会发生任何事情,但是由于以下原因,您不想在生产环境中开发软件包:
require-dev 的一些不错的候选人是:
"filp/whoops": "^2.0",
"fzaninotto/faker": "^1.4",
"mockery/mockery": "^1.0",
"nunomaduro/collision": "^2.0",
"phpunit/phpunit": "^7.0"
您可以看到上面的程序包在做什么,并且会看到为什么在生产中不需要它们。
在此处查看更多信息:https://getcomposer.org/doc/04-schema.md
答案 5 :(得分:0)
请注意 require-dev(仅root用户)!
这意味着 require-dev 部分仅在您的软件包是整个项目的根目录时才有效。即如果您从软件包文件夹中运行:id
。
如果您为某个主项目开发一个具有自己的composer.json的插件,那么您的 require-dev 部分将被完全忽略!如果需要开发依赖项,则必须将 require-dev 移至主项目中的composer.json。