【问题标题】:Composer: How to override a requirement globally for composer.json?Composer:如何覆盖 composer.json 的全局要求?
【发布时间】:2017-04-21 07:29:24
【问题描述】:

TL;DR:

我的项目需要库 A,A 需要 B1。 B1坏了,但有一个叉子B2。 我想实现即使 A 需要 B1 而不是 B2,作曲家也会安装 B2 而不是 B1。

怎么做?

更详细:

在 symfony 项目中,我们需要以下库:

"require": {
   "emanueleminotto/twig-cache-bundle": "1.0.2",
}

这个库requires itself另一个当前损坏的库:

"require": {
    "asm89/twig-cache-extension": "^1.3"
},

对于损坏的库,pull request 已经存在 4 个多月了,但维护者拒绝合并它。

我的问题是,如果也可以覆盖子依赖项的依赖项,那么总是使用修补的分支而不是原始分支?

对于 asm89/twig-cache-extension,存在以下带有修复的分支:https://github.com/blackandred/twig-cache-extension

我尝试将这个 fork 添加到我的 composer.json 并在“repositories”下明确注册了这个 fork:

"repositories": [
    {
        "type": "git",
        "url": "https://github.com/blackandred/twig-cache-extension"
    }
],

并在我的 composer-json 中添加了依赖项,并将版本更改为“dev-master”:

"require": {
    "asm89/twig-cache-extension": "dev-master",
    "emanueleminotto/twig-cache-bundle": "1.0.2",
}

但由于 emanueleminotto/twig-cache-bundle 仍然需要原始库,因此作曲家忽略了 fork 并安装了原始库。

我能在这里做什么?

【问题讨论】:

    标签: php symfony composer-php


    【解决方案1】:

    我相信文档对于这种情况有一个 good example。

    基本上你需要在 composer.json 中定义一个别名,如下所示:

    "require": {
        "asm89/twig-cache-extension": "dev-master  as 1.3",
        "emanueleminotto/twig-cache-bundle": "1.0.2",
    }
    

    提问者补充:

    还差一步:"composer update asm89/twig-cache-extension"

    【讨论】:

    【解决方案2】:

    将replace 部分添加到你的fork 的composer.json:

    {
        "replace": { 
            "asm89/twig-cache-extension": "self.version" 
        } 
    }
    

    【讨论】:

      猜你喜欢
      • 2023-04-09
      • 2020-07-28
      • 2023-03-28
      • 2015-06-06
      • 2014-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多