首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >composer.json中的require和require dev部分有什么区别?

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

Stack Overflow用户
提问于 2013-10-01 21:45:50
回答 6查看 126.3K关注 0票数 126

我开始使用composer,我对它知之甚少,对web应用程序开发也有一些经验。

我只是浏览了一下Nettuts+ Tutorial,所以我有一个关于composer的基本问题。

代码语言:javascript
复制
{
  "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"
}

无论出现在composer install --dev

  • I part中的是什么,
  1. 都只会随"require-dev"一起下载和安装。阅读一些composer文档,但仍然不明白我们使用"require-dev" part的原因是什么?是不是因为我们想获得软件包的特定版本,而不是总是获得最新的稳定版本?
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2017-08-17 21:01:16

不同的环境

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

  • development
  • testing
  • staging
  • production

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

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

  • staging
  • production

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

  • developing
  • testing

环境。

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

  • friendsofphp/php-cs-fixer (检测并修复编码风格issues)
  • squizlabs/php_codesniffer )(检测并修复编码风格issues)
  • phpunit/phpunit (使用tests)
  • etc.

驱动开发

部署

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

代码语言:javascript
复制
$ composer install

要安装productiondevelopment依赖项,请执行以下操作。

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

代码语言:javascript
复制
$ composer install --no-dev

仅安装production依赖项。

语义学

换句话说,

  • require
  • require-dev

在运行以下命令时指示composer应安装哪些包

代码语言:javascript
复制
$ composer install

代码语言:javascript
复制
$ composer install --no-dev

这就是全部。

注意:永远不会安装应用程序或软件包所依赖的软件包的开发依赖项

有关参考,请参阅:

票数 162
EN

Stack Overflow用户

发布于 2013-10-01 23:52:49

  1. 根据composer's manual的说法:

要求-开发(仅限根用户)

列出开发此软件包或运行测试等所需的软件包。默认情况下会安装根软件包的开发要求。installupdate都支持--no-dev选项,该选项可防止安装开发人员依赖项。

因此,运行composer install还将下载开发依赖项。

  1. ,原因其实很简单。在为特定库做贡献时,您可能希望运行测试套件或其他开发工具(例如symfony)。但如果将此库安装到项目中,则可能不需要这些开发依赖项:并不是每个项目都需要测试运行程序。
票数 62
EN

Stack Overflow用户

发布于 2013-10-01 23:53:11

来自composer站点(足够清楚)

require#

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

require dev(仅根目录的)#

列出开发此软件包或运行测试等所需的软件包。默认情况下会安装根软件包的开发要求。install或update都支持--no-dev选项,该选项可防止安装开发依赖项。

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

也请检查authorthis post发布的这个答案。

票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19117871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档