【问题标题】:Different Package Version for Development & Production in ComposerComposer 中用于开发和生产的不同包版本
【发布时间】:2019-11-10 10:27:33
【问题描述】:

我正在开发多个作曲家包和一个需要我开发的所有包的应用程序。

我想知道如何才能拥有多个版本的包

  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>]...

【问题讨论】:

  • 你的 composer.json 在哪里?
  • 不,但它在哪里,require-dev 只是 root。
  • 我使用 composer why-not install 运行了你的作曲家内容并得到这个异常错误 [InvalidArgumentException] 找不到包“安装”在你的项目禁止 [-r|--recursive] [-t| --tree] [--] []

标签: php composer-php


【解决方案1】:

composer 有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 的原因。

要在 DEVPROD 中拥有不同的包,您需要像 @George 所说的那样为每个环境使用不同的 composer.json 文件。

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

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

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

如果你需要一个新的包,你需要运行命令两次,一次正常,一次在composer之前添加COMPOSER=composer-other.json,以确保在开发和生产中都会添加包.

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

【讨论】:

  • 原因源于使用主网站和供应商库的事实。在新功能的开发周期中,您的网站需要dev-development(或类似的),一旦您的网站稳定,就给它一个标签。这意味着您必须对 composer.json 进行许多更改/合并才能正确标记。一旦完成,您就必须再次返回开发-开发。这样做很烦人。为 dev/prod 拥有两个不同的 composer.json 会更容易。
  • 我们现在求助于使用 composer-scripts 来管理它。我们的composer.json 现在是我们使用的默认值。它是开发版本,因为这是我们 99% 的时间都在开发的版本。 composer-production.json(和 .lock)用于实时部署。这些是我们为可能不知道如何运行示例命令的人使用的脚本:"scripts" : { "checkout-prod": "git checkout master; COMPOSER=composer-production.json composer install", "checkout-dev": "git checkout development; composer install" } 然后只是 composer checkout-dev
  • 由于您使用DEV 包来开发新的不稳定功能,因此拥有不同的版本是有意义的。很高兴知道使用 2 个作曲家文件对您来说是一个完美的解决方案:)
  • 长话短说,你在 dev 和 prod 中需要“不同的包”的原因不是你想要不同的 versions 本身,而是在 dev 上,你想要开发,并且你在一个 git 分支上执行此操作——因此需要一个安装该 git 分支的作曲家。而且,当然,您不希望生产中的开发分支,也不希望您不从事的工作的开发分支,因此您需要定义一个版本(范围)。
【解决方案2】:

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

COMPOSER=composer-dev.json php composer install

参考Composer - specify `composer.json` path

【讨论】:

    猜你喜欢
    • 2016-10-18
    • 2021-06-23
    • 1970-01-01
    • 2017-07-27
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    相关资源
    最近更新 更多