Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Composer php composer.json中require和require dev部分之间有什么区别?_Composer Php - Fatal编程技术网

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

Composer php composer.json中require和require dev部分之间有什么区别?,composer-php,Composer Php,我开始使用composer,我对它知之甚少,对web应用程序开发也有一点经验 我只是随便说说,所以我有一个关于作曲家的基本问题 { "require": { "laravel/framework": "4.0.*", "way/generators": "dev-master", "twitter/bootstrap": "dev-master", "conarwelsh/mustache-l4": "dev-master" }, "require-d

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

我只是随便说说,所以我有一个关于作曲家的基本问题

{
  "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"
}
  • 无论出现在
    “require dev”
    部分中的是什么,都将仅与
    composer install--dev
    一起下载和安装
  • 我读了一些composer的文档,但仍然不明白为什么我们有
    “require dev”
    部分?这是因为我们想要获得软件包的特定版本而不是始终获得最新的稳定版本吗
  • 根据:

    需要开发人员(仅限root用户)

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

    因此,运行
    composer安装
    也将下载开发依赖项

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

  • 从composer站点(非常清楚)

    要求#

    列出此包所需的包。包裹将不会被删除 除非能够满足这些要求,否则不得安装

    需要开发人员(仅限root用户)#

    列出开发此包或运行测试所需的包, 等。根包的开发需求由 违约安装或更新都支持--no dev选项 防止安装开发依赖项

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

    也可以查看和发布的此答案。

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

    • 开发
    • 测试
    • staging
    • 生产
    不同环境中的不同依赖关系 在
    composer.json
    require
    部分中声明的依赖项通常是在中运行应用程序或包所需的依赖项

    • staging
    • 生产
    环境,而
    require dev
    部分中声明的依赖项通常是

    • 开发
    • 测试
    环境

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

    • friendsofphp/php-cs-fixer
      (用于检测和修复编码风格问题)
    • squizlabs/php\u codesniffer
      (用于检测和修复编码风格问题)
    • phpunit/phpunit
      (使用测试驱动开发)
    • 等等
    部署 现在,在
    开发
    测试
    环境中,您通常会运行

    $ composer install
    
    $ composer install --no-dev
    
    安装
    生产
    开发
    依赖项

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

    $ composer install
    
    $ composer install --no-dev
    
    仅安装
    生产
    依赖项

    语义学 换句话说,这些部分

    • require
    • require dev
    composer
    指示运行时应安装哪些软件包

    $ composer install
    

    仅此而已

    注意您的应用程序或软件包所依赖的软件包的开发依赖关系将永远不会安装

    有关参考,请参阅:


      • 要求部分 本节包含在生产环境中安装/需要的最佳候选程序包/依赖项


        需要开发部分:此部分包含可供开发人员用于测试其代码(或在其本地计算机上进行实验,但她不希望在生产环境中安装这些软件包)的软件包/依赖项.

        一般规则是,您只希望在开发(dev)环境(例如本地环境)中使用来自require dev部分的包

        require dev部分中的包是帮助您调试应用程序、运行测试等的包

        暂存生产环境中,您可能只需要要求部分中的包

        但无论如何,您可以在任何环境中运行composer安装--no devcomposer更新--no dev,该命令将只安装必需的部分而不是必需的中的包,但您可能只想在暂存生产环境中运行此功能,而不是在本地环境中运行

        理论上,您可以将所有包放在require部分中,但不会发生任何事情,但您不希望在生产环境中开发包,原因如下:

      • 速度
      • 可能会暴露一些调试信息
      • 一些优秀的候选人需要开发