web-dev-qa-db-ja.com

Composerで特定のコミットを正しく要求して、依存パッケージで使用できるようにする方法は?

ライブラリ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"
    }
}

そしてそれはうまく動作します:

$ 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する方法ですか?

89
Maciej Sz

ライブラリとアプリケーションの両方で、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"
    }
}

ドキュメント から:

依存関係の1つが不安定なパッケージに依存している場合は、十分な安定性フラグとともに明示的に要求する必要があります。

このドキュメントでは、bar/bar-app ComposerファイルにGaufretteのリポジトリを含める必要があることも示唆されていますが、この場合は必要ではないようです。理由はわかりません。

136
Chris

コマンドラインで行う方法は次のとおりです。

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

ハッシュ全体を使用する必要はありません。7文字の長さのハッシュでうまくいくようです。上記のように、プロジェクトはdevをサポートする必要があります-まだ設定されていないと文句を言うでしょう。また、--with-dependenciesを使用して、更新中の依存関係を取得します。

6
powpow12

フォークしてGitリポジトリを変更する場合は、パッケージ名が実際にパッケージのcomposer.jsonファイルで定義されていることを確認してください-パッケージを自分のjoshuapaling githubアカウントにフォークしたとしても、パッケージは現在、URLに存在していました https://github.com/joshuapaling/Cake-Resque.git 。これは、作曲家の観点からはパッケージの名前にまったく影響していませんでした。

愚かなエラー-しかし、私は作曲家が初めてで、最初ははっきりしていませんでした!ですから、これが同じ問題を抱えている他の人の助けになることを願っています。

0
Gayan Kalhara