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

时间:2017-04-21 07:29:24

标签: php symfony composer-php

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个月,但维护者拒绝合并它。

我的问题是,如果还可以覆盖子依赖关系的依赖关系,那么总是使用修补的fork而不是原来的那个?

对于asm89 / twig-cache-extension存在以下带有修复的分支: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 个答案:

答案 0 :(得分:5)

我认为这种情况下的文档有good example

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

name 'self' is not defined

提问者添加:

仍然缺少一步:purchase_order_status = fields.One2many('purchase.order', 'request_id', string='Order',copy=True) purchase_id = fields.Many2one('purchase.request', 'Purchase request')

答案 1 :(得分:2)

replace部分添加到您的前叉composer.json

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