如何在 Composer 中正确要求特定的提交,以便它可用于依赖包?

2022-08-30 07:07:12

我有一个库,它是GitHub的特定提交:foo/foo-librequires

{
    "name": "foo/foo-lib",
    "repositories": [
        {
            "type": "vcs",
            "url": "https://github.com/KnpLabs/Gaufrette.git"
        }
    ],
    "require": {
        "knplabs/gaufrette": "dev-master#2633721877cae79ad461f3ca06f3f77fb4fce02e"
    }
}

它工作正常:

$ composer update
Loading composer repositories with package information
Updating dependencies (including require-dev)                                 
  - Updating knplabs/gaufrette dev-master (2633721 => 2633721)
    Checking out 2633721877cae79ad461f3ca06f3f77fb4fce02e

Generating autoload files

但是当我在其他项目中需要该库时:

{
    "name": "bar/bar-app",
    "repositories": [
        {
            "type": "vcs",
            "url": "ssh://git.example.com/foo-lib"
        }
    ],
    "require-dev": {
        "foo/foo-lib": "dev-master"
    }
}

它产生依赖关系错误:

Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - Installation request for foo/foo-lib dev-master -> satisfiable by foo/foo-lib[dev-master].
    - foo/foo-lib dev-master requires knplabs/gaufrette dev-master#2633721877cae79ad461f3ca06f3f77fb4fce02e -> no matching package found.

所以我的问题是:如何在我的库中正确使用GitHub的特定提交,以便它可以在依赖包中使用?require


答案 1

您必须在库和应用程序中明确要求该哈希值的 Gaufrette 库,并带有标志。像这样的东西应该在应用程序中工作:devcomposer.json

{
    "name": "bar/bar-app",
    "repositories": [
        {
            "type": "vcs",
            "url": "ssh://git.example.com/foo-lib"
        }
    ],
    "require-dev": {
        "foo/foo-lib": "dev-master",
        "knplabs/gaufrette": "dev-master#2633721877cae79ad461f3ca06f3f77fb4fce02e"
    }
}

文档中

如果其中一个依赖项依赖于不稳定的包,则还需要显式要求它,以及其足够的稳定性标志。

该文档还建议您需要在 Composer 文件中包含 Gaufrette 的存储库,尽管在这种情况下听起来没有必要这样做。我不知道为什么。bar/bar-app


答案 2

以下是您在命令行上执行的操作:

composer update knplabs/gaufrette:dev-master#2633721 --with-dependencies

您不必使用整个哈希值,七个字符长的哈希值似乎可以解决问题。如上所述,您的项目将需要支持dev - 如果尚未设置,它将抱怨。此外,用于获取要更新的依赖项的任何依赖项。--with-dependencies


推荐