从本地目录加载嵌套包

时间:2020-08-20 16:50:55

标签: package composer-php package-management

问题

在本地磁盘上的相邻目录中有三个composer软件包:foobarbaz。它们都有相同的composer.json文件(包名称除外):

{
    "name": "acme/foo",
#   "name": "acme/bar",
#   "name": "acme/baz",
    "repositories": [
        {
            "type": "path",
            "url": "../*"
        }
    ]
}

我们要在foo内使用bar。这可以按预期工作。

$ cd /home/acme/bar
$ composer require acme/foo:dev-master

然后,我们要在bar内使用baz。这会失败。

$ cd /home/acme/baz
$ composer require acme/bar:dev-master
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - Installation request for acme/bar dev-master -> satisfiable by acme/bar[dev-master].
    - acme/bar dev-master requires acme/foo dev-master -> no matching package found.

为什么作曲家找不到foo软件包?

失败的选项

我尝试过的事情:

  • 为每个程序包使用单独的存储库
  • 使用绝对存储库路径
  • 禁用符号链接

这些都不起作用。

解决方法

我找到了一个变通的解决方法。事实证明,当我们首先需要foo然后又需要bar时,作曲者便能够解决依赖关系。

相关讨论

1 个答案:

答案 0 :(得分:1)

这由minimum-stability设置控制。默认情况下将其设置为stable,因此,除非在根项目的require部分中明确指定了不稳定约束,否则Composer将不会安装不稳定依赖关系。您可以通过添加到项目的composer.json来更改此设置:

"minimum-stability": "dev",
"prefer-stable": true,

但是不建议这样做,因为它会影响项目中的所有依赖关系,因此您可能会得到比所需更多的不稳定依赖关系。明确要求每个不稳定的子依赖关系都可以为您提供更多的控制权,但是通常,您应避免使用具有不稳定的子依赖关系的程序包(尤其是那些定义为dev-master的程序包-某些事情会中断只是时间问题)。