PHP作曲家:更新本地路径存储库依赖项

时间:2019-08-27 12:55:37

标签: php composer-php

我有一个项目,需要一堆本地路径存储库。这些本地路径存储库部分需要彼此,也需要远程存储库。

例如,本地仓库composer.json之一如下:

{
    "description": "",
    "type": "neos-project",
    "name": "mapo/campaign",
    "repositories": [
        {
            "type": "path",
            "url": "Source/Mapo.NodeTypes"
        }
    ],
    "require": {
        "mapo/nodetypes": "*"
    },
    "autoload": {
        "psr-4": {
            "Mapo\\Campaign\\": "Classes/"
        }
    },
    "extra": {
        "neos": {
            "package-key": "Mapo.Campaign"
        }
    }
}

然后mapo/nodetypes本地软件包还需要一个专用的远程存储库:

{
    "description": "",
    "type": "neos-project",
    "name": "mapo/nodetypes",
    "minimum-stability": "dev",
    "repositories": [
        {
            "type": "git",
            "url": "url to private repo.git"
        },
        {
            "type": "path",
            "url": "../Mapo.Somepackage"
        },
    ],
    "require": {
        "mapo/privateproject": "*",
        "mapo/somepackage": "@dev"
    },
    "autoload": {
        "psr-4": {
            "Mapo\\NodeTypes\\": "Classes/"
        }
    },
    "extra": {
        "neos": {
            "package-key": "Mapo.NodeTypes"
        }
    }
}

现在,我需要在mapo/privateproject中测试一项新功能。因此,我在私人仓库中创建了一个名为issue0815的新分支,并进行了更改。我还在主issue0815中创建了一个新分支mapo project(具有在本地更改composer.json的本地路径)。

我将mapo/nodetypes的依存关系更新为"mapo/privateproject": "dev-issue0815",

我的问题是,无论使用哪个命令,编辑器都拒绝为专用存储库安装issue0815分支。起初,作曲家抱怨说,它无法安装依赖项dev-issue0815,因为composer.lock阻止了它。因此,我从composer.lock中删除了所有私有仓库和mapo / nodetypes的用法。

最让我惊讶的是,这位作曲家恢复了原始的composer.lock文件。它只是完全忽略了我当前的本地主项目分支-该分支对本地路径repo composer.json文件进行了修改,只需要master分支中的内容。

那么,如何更新需要从私有存储库中获取特定分支的本地路径存储库的依赖关系?

1 个答案:

答案 0 :(得分:0)

这花了我一段时间,但是我对composer.json所做的更改被完全忽略的原因(包括当我删除composer.lock时也是如此)是,如果composer得出结论,则忽略您的更改,即{ {1}}是正确的。

来自https://github.com/composer/composer/issues/4312#issuecomment-191488570

  

现在,Composer更喜欢从installed.json文件派生的已安装软件包。因此,只要替换有效,它的确会继续生成相同的解决方案并因此锁定。这只是因为Composer在内部工作。

     

要完全“重置”它并使其重新考虑已安装的软件包(在由于软件包更新而自动“更正”之前),您必须删除vendor / composer / installed.json以及锁。这将触发对依赖关系的完全重新评估并重新安装。您也可以只进行完整清理,然后删除整个供应商目录。

我认为,这也是通常建议删除供应商目录的原因。