composer.json中的require和require-dev部分有什么区别?

我开始使用composer php,我对此知之甚less,并且对Web应用程序开发有一点经验。

我只是走过Nettuts +教程 ,所以我有关于composer php的基本问题。

{ "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" } 
  1. 无论出现在“require-dev”部分,只会下载和安装composer php安装–dev
  2. 我读了一些composer php的文档,但仍然不明白我们有什么“需要开发”的一部分? 是因为我们想要得到特定版本的软件包,而总是得到最新的稳定版本?

不同的环境

通常,软件将运行在不同的环境中:

  • development
  • testing
  • staging
  • production

不同环境中的不同依赖关系

composer.jsonrequire部分中声明的依赖关系通常是运行应用程序或包中所需的依赖关系

  • staging
  • production

环境,而在require-dev部分中声明的依赖关系通常是依赖关系

  • developing
  • testing

环境。

例如,除了用于实际运行应用程序的软件包之外,开发软件可能还需要软件包,例如:

  • friendsofphp/php-cs-fixer (检测并修复编码风格问题)
  • squizlabs/php_codesniffer (检测并修复代码风格问题)
  • phpunit/phpunit (使用testing来推动开发)
  • 等等

部署

现在,在developmenttesting环境中,您通常会运行

 $ composer install 

安装productiondevelopment依赖。

但是,在stagingproduction环境中,只需安装运行应用程序所需的依赖关系,并且作为部署过程的一部分,通常会运行

 $ composer install --no-dev 

只安装production依赖关系。

语义

换句话说,部分

  • require
  • require-dev

composer指出在运行时应该安装哪些软件包

 $ composer install 

要么

 $ composer install --no-dev 

就这些。

注释应用程序或程序包所依赖的程序包的开发依赖性将永远不会被安装

作为参考,请参阅:

  1. 根据composer php手册 :

    require-dev(仅限根)

    列出开发这个软件包或运行testing等所需的软件包。默认情况下安装根软件包的开发需求。 installupdate支持--no-dev选项,以防止安装dev依赖项。

    所以运行composer install也将下载开发依赖。

  2. 原因其实很简单。 在为特定的图书馆做贡献时,您可能需要运行testing套件或其他开发工具(如symfony)。 但是,如果将此库安装到项目中,则可能不需要这些开发依赖项:并非每个项目都需要testing运行程序。

从composer php网站(很明显)

要求#

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

require-dev(仅限根)#

列出开发这个软件包或运行testing等所需的软件包。默认情况下安装根软件包的开发需求。 安装或更新都支持–no-dev选项,以防止安装dev依赖项。

在Composer中使用require-dev,您可以声明开发/testing项目所需的依赖关系,但不需要在生产环境中使用。 当您将项目上传到生产服务器(使用git)时, require-dev部分将被忽略。

另外检查由作者和这篇文章张贴这个答案以及。

require部分本节包含了更适合在生产环境中安装/需要的软件包/依赖关系。

require-dev部分:本节包含开发人员可以使用的软件包/依赖项来testing她的代码(or for the experiment purpose on her local machine and she wants these packages should not be installed on the production environment.)