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

Art*_*san 78 composer-php

我开始使用作曲家,我对它知之甚少,并且对Web应用程序开发有一点经验.

我只是通过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"
}
Run Code Online (Sandbox Code Playgroud)
  1. 无论"require-dev"部分出现什么,只会下载并安装作曲家安装--dev
  2. 我读了一些作曲家的文档,但仍然不明白我们有"require-dev"部分的原因是什么?是因为我们想获得特定版本的软件包,而不是总是获得最新的稳定版本?

loc*_*inz 82

不同的环境

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

  • development
  • testing
  • staging
  • production

不同环境下的不同依存关系

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

  • staging
  • production

环境,而在该require-dev部分中声明的依赖项通常是所需的依赖项

  • developing
  • testing

环境.

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

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

部署

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

$ composer install
Run Code Online (Sandbox Code Playgroud)

安装它们productiondevelopment依赖项.

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

$ composer install --no-dev
Run Code Online (Sandbox Code Playgroud)

仅安装production依赖项.

语义

换句话说,这些部分

  • require
  • require-dev

指示composer运行时应安装的软件包

$ composer install
Run Code Online (Sandbox Code Playgroud)

要么

$ composer install --no-dev
Run Code Online (Sandbox Code Playgroud)

就这些.

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

供参考,请参阅:

  • @pilat 您可以,但请确保使用`-no-dev` 进行安装。此外,FTP 可能会很慢。 (2认同)

Flo*_*ent 56

  1. 根据作曲家的手册:

    require-dev(仅限root)

    列出开发此程序包或运行测试等所需的程序包.默认情况下会安装根程序包的开发人员要求.两个installupdate支持--no-dev,以防止开发依赖从安装选项.

    所以运行composer install也会下载开发依赖项.

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


The*_*pha 18

来自作曲家网站(很明显)

要求#

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

require-dev(root-only)#

列出开发此程序包或运行测试等所需的程序包.默认情况下会安装根程序包的开发人员要求.安装或更新都支持--no-dev选项,以防止安装dev依赖项.

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

另请查看作者本文发布的答案.

  • 请解释一下为什么"way/generators":"dev-master"在"require"部分?,我不再需要它在生产中了. (3认同)
  • 这个想法是你在生产中使用--no-dev标志. (3认同)
  • *默认情况下安装根包的开发要求*部分明确说明了require-dev的依赖项已安装,即使在生产服务器上也是如此。 (2认同)

归档时间:

查看次数:

83764 次

最近记录:

6 年,2 月 前