Composer中用于开发和生产的不同软件包版本

时间:2019-06-28 12:51:44

标签: php composer-php

我正在研究多个作曲家程序包和一个对我开发的所有程序包进行剂量查询的应用程序。

我想知道如何获得具有多个版本的软件包

  1. 稳定的生产版本
  2. 开发/用于本地开发的主版本

我尝试了以下配置,但没有用

{
  "minimum-stability" : "dev",
  "require"           : {
    "varunsridharan/vsp-framework" : "^1.0",
    "wponion/wponion"              : "^1.0"
  },
  "require-dev"       : {
    "varunsridharan/vsp-framework" : "dev-master",
    "wponion/wponion"              : "dev-development"
  }
}

当我运行composer installcomposer install --no-dev时,我得到以下输出

Loading composer repositories with package information
Updating dependencies


  [Composer\DependencyResolver\SolverProblemsException]
  Problem 1
      - The requested package varunsridharan/vsp-framework ^1.0 exists as varunsridharan/vsp-framework[dev-master] but these are rejected by your constraint.
    Problem 2
      - The requested package wponion/wponion ^1.0 exists as wponion/wponion[dev-development] but these are rejected by your constraint.


install [--prefer-source] [--prefer-dist] [--dry-run] [--dev] [--no-dev] [--no-custom-installers] [--no-autoloader] [--no-scripts] [--no-progress] [--no-suggest] [-v|vv|vvv|--verbose] [-o|--optimize-autoloader] [-a|--classmap-author
itative] [--apcu-autoloader] [--ignore-platform-reqs] [--] [<packages>]...

2 个答案:

答案 0 :(得分:2)

原因是作曲家之所以拥有requirerequire-dev的原因是,允许开发人员安装软件包,这些软件包将使用不建议在生产中使用的软件包来更好地进行调试。通过在require-dev上添加一个软件包,生产中将不需要此软件包。

例如如果您想优化查询,请查看是否存在任何n + 1查询问题,等等,您可能希望安装php-debugbar来向您显示此信息,但是在生产中使用此信息可能会暴露您的查询并提供敏感信息对坏蛋

require中包含的软件包将始终在开发和生产中安装,这就是您看到错误The requested package xxxxx exists as xxxxx[dev-development] but these are rejected by your constraint的原因。

要在 DEV PROD 中使用不同的软件包,您需要为每个环境使用不同的composer.json文件,如@George所说。

您可以有一个composer.json文件作为生产作曲家,另一个composer-dev.json可以用于开发。

在您的本地环境中,您需要将 COMPOSER env变量的值设置为 composer-dev.json

简单的方法是运行像这样的作曲家:COMPOSER=composer-other.json php composer.phar install

如果您需要一个新的软件包,则需要运行两次命令,一次正常运行,一次是通过在composer之前添加COMPOSER = composer-other.json来运行一次,以确保将软件包同时添加到dev和production中

PS,我不知道为什么需要不同的软件包来进行开发和生产,但是建议在dev和prod中使用相同版本的软件包,因为使用不同版本的软件包可能会带来错误。

答案 1 :(得分:1)

您可以尝试在开发环境中更改composer.json文件。参见Composer

COMPOSER=composer-dev.json php composer install

引用Composer - specify `composer.json` path