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

Mac*_* Sz 94 php github composer-php

我有一个图书馆foo/foo-lib,其requires具体从GitHub承诺:

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

它工作正常:

$ 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
Run Code Online (Sandbox Code Playgroud)

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

{
    "name": "bar/bar-app",
    "repositories": [
        {
            "type": "vcs",
            "url": "ssh://git.example.com/foo-lib"
        }
    ],
    "require-dev": {
        "foo/foo-lib": "dev-master"
    }
}
Run Code Online (Sandbox Code Playgroud)

它产生依赖性错误:

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.
Run Code Online (Sandbox Code Playgroud)

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

Chr*_*ris 140

你必须dev在你的库和你的应用程序中明确要求那个散列的Gaufrette库,并带有一个标志.这样的东西应该在应用程序中起作用composer.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"
    }
}
Run Code Online (Sandbox Code Playgroud)

文档:

如果您的某个依赖项依赖于不稳定的包,则还需要明确要求它,以及其足够的稳定性标志.

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

  • 它[看起来你将不得不](https://getcomposer.org/doc/04-schema.md#package-links)明确要求Gaufrette在你的库和你的应用程序中的那个哈希值."如果你的一个依赖项依赖于一个不稳定的包,你需要明确地要求它,以及它足够的稳定性标志." 请注意,您可以在`dev`稳定性中使用一些软件包,例如Gaufrette,对于其他所有内容,默认为"stable". (3认同)
  • 似乎GitHub已由Composer提供了开箱即用的功能-我刚刚从第一个软件包中删除了““ url”:“ https://github.com/KnpLabs/Gaufrette.git”`,它仍然有效。 (2认同)

小智 7

您可以在命令行中执行以下操作:

composer update knplabs/gaufrette:dev-master#2633721 --with-dependencies
Run Code Online (Sandbox Code Playgroud)

您不必使用整个散列,看起来像七个字符长的散列就可以解决问题。如上所述,您的项目将需要支持dev-如果尚未设置,它将抱怨。同样,用于--with-dependencies获取要更新的依赖关系。

  • 刚试过这个,似乎不适用于 Composer 2。 (2认同)