复合.json中的Required和request-dev部分有什么区别?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (11)

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

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

{
  "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 install --dev
  2. 我阅读了一些作曲家的文档,但仍不明白我们有什么“需要 - 开发”部分的原因?是否因为我们想要获取特定版本的软件包而不是获取最新的稳定版本?
提问于
用户回答回答于

不同的环境

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

  • 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

安装两者productiondevelopment依赖关系。

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

$ composer install --no-dev

只安装production依赖项。

语义

换句话说,部分

  • require
  • require-dev

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

$ composer install

要么

$ composer install --no-dev

就这些。

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

作为参考,请参阅:

用户回答回答于
  1. 根据composer's manual: require-dev(仅限根) 列出开发此软件包或运行测试等所需的软件包。默认情况下安装根软件包的开发需求。两者installupdate支持--no-dev防止安装依赖关系的选项。 所以运行composer install也会下载开发依赖关系。
  2. 原因其实很简单。在为特定的库做贡献时,可能想要运行测试套件或其他开发工具(例如symfony)。但是,如果将此库安装到项目中,那么可能不需要这些开发依赖项:并非每个项目都需要测试运行程序。

扫码关注云+社区