首页 > 解决方案 > 使用自定义包无法解决 Composer 要求

问题描述

我目前正在开发自己的作曲家包,但他们未能尝试执行composer update.

这是我的根composer.json

{
    ...
    "repositories": {
        "bar": {
            "type": "path",
            "url": "packages/pinnokkio/bar",
            "options": {
                "symlink": true
             }
        }
    },
    "require": {
        "php": "^8.0",
        ...
        "pinnokkio/bar": "@dev"
    },
    ...
}

这意味着,应该安装包pinnokkio/bar 。并且包pinnokkio/bar需要pinnokkio/foo作为依赖项。

pinnokkio/barcomposer.json

{
    "name": "pinnokkio/bar",
    ...
    "repositories": {
        "foo": {
            "type": "path",
            "url": "../foo",
            "options": {
                "symlink": true
            }
        }
    },
    "require": {
        "pinnokkio/foo": "@dev"
    },
    ...
}

pinnokkio/foocomposer.json

{
    "name": "pinnokkio/foo",
    "require": {
        "php": "^8.0"
    },
    ...
}

总而言之,在我的主要composer.json中,我将需要一个需要pinnokkio/foo才能运行的包。更多即将推出的软件包都需要pinnokkio/foo才能运行,但不幸的是,我在尝试执行时遇到此错误composer update。所有软件包位于<root>/packages/

 Problem 1
    - pinnokkio/bar[dev-feature-modules, dev-master] require pinnokkio/foo@dev -> could not be found in any version, there may be a typo in the package nam
e.
    - Root composer.json requires pinnokkio/bar@dev -> satisfiable by pinnokkio/bar[dev-feature-modules, dev-master].

标签: phpdependenciescomposer-php

解决方案


repositories密钥只能在 root 上读取composer.json

文档中所述:

存储库不是递归解析的。您只能将它们添加到您的主 composer.json。依赖项 composer.jsons 的存储库声明被忽略。

递归解决repositories会有问题。如果多个包声明了包含相同包的不同存储库,作曲家如何知道使用哪个?

此外,通过为已知软件包提供备用存储库,这将为依赖劫持系统打开大门,并且您最终会在系统中安装不受信任的软件包。

如果您从自定义存储库安装多个包,则需要在根配置文件中声明所有自定义存储库。


推荐阅读