首页 文章

Composer:如何全局覆盖composer.json的需求?

提问于
浏览
3

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"
},

对于破坏的库已经存在了超过4个月的pull request但是维护者拒绝合并它 .

我的问题是,如果有可能为子依赖关系覆盖依赖关系,那么总是使用修补的fork而不是原始的fork?

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

我试图将这个fork添加到我的composer.json并在“存储库”下明确注册了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仍然需要原始库,因此composer忽略fork并安装原始库 .

我能在这做什么吗?

2 回答

  • 2

    我认为这个方案的文档有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"

  • 5

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

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

相关问题