Composer中开发和生产环境的不同包版本。

6
我正在开发多个Composer包和一个应用程序,该应用程序需要我开发的所有包。我想知道如何创建具有多个版本的软件包:
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 文件在哪里? - Dylan KAS
没有啊,它在哪里呢?require-dev 只能是根。 - Dylan KAS
我使用Composer运行了你的Composer内容,为什么不安装并出现以下异常错误? [InvalidArgumentException] 在您的项目中找不到“install”包禁止[-r | --recursive] [-t | --tree] [--] <package> [<constraint>] - Amit Sharma
2个回答

9
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
要在不同的环境中使用不同的包,您需要为每个环境准备不同的composer.json文件,正如@George所说。
您可以拥有一个composer.json文件作为生产Composer,还可以拥有一个composer-dev.json作为开发Composer。
在本地环境中,您需要将COMPOSER环境变量的值设置为composer-dev.json
简单的方法是像这样运行composer:COMPOSER=composer-other.json php composer.phar install 如果您想要引用一个新的包,则需要运行两次命令,一次正常运行,一次在composer之前添加COMPOSER=composer-other.json,以确保该包同时被添加到开发和生产环境中。 P.S.我不知道为什么您需要在开发和生产环境中使用不同的包,但建议在开发和生产中使用相同版本的包,因为使用不同版本可能会带来错误。

原因在于同时使用主网站和供应商库。在开发新功能的周期中,您的网站需要进行“dev-development”(或类似)测试,一旦稳定后再进行标记。这意味着您必须对composer.json进行许多更改/合并才能正确标记。完成后,您还需要回到dev-develop。这样做很烦人。为dev/prod拥有两个不同的composer.json可以使这个过程更加容易。 - Sam
我们现在采用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即可。 - Sam
由于您正在使用“DEV”软件包开发新的不稳定功能,因此拥有不同版本是有意义的。很高兴知道对您来说使用2个composer文件是完美的解决方案 :) - Zenel Rrushi
1
简而言之,您需要在开发和生产中使用“不同的包”的原因并不是您想要不同的版本,而是在开发中,您想要开发,并且您可以在git分支上完成--这需要一个安装该git分支的composer。当然,您不希望在生产环境中有开发分支,也不希望有您没有工作的东西的开发分支,因此您需要定义一个版本(范围)。 - user151841

6

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接