web-dev-qa-db-ja.com

composer "path"リポジトリが機能しない

私は次のようなディレクトリ構造を持っています:

composer.json < Main
  packages/
    balunker/
      testpackage/
        composer.json < Package
        src/
          TestPackage.php

メインのcomposer.jsonは次のようになります。

{
    "name": "vagrant/composer-test",
    "repositories": [
        {
             "type": "path",
            "url": "packages/*/*"
        }
    ],
    "require": {
        "balunker/testpackage": "*"
    }
}

パッケージcomposer.jsonは次のようになります:

{
  "name": "balunker/testpackage",
  "autoload": {
    "psr-4": {
      "Balunker\\": "src/"
    }
  }
}

composer updateで、パッケージを解決できなかったというメッセージを簡単に受け取ります。シンボリックリンクは作成されず、パッケージもインストールされません。文字通り、これを理解するために1日の半分を費やしましたが、成功することはありませんでした。

また、これのcomposer update -vvv詳細出力をアップロードしました: http://Pastebin.com/mMRHsACk

My composerバージョンは最新(2016年4月20日2:39 UTC UTC)であり、これらはすべてVagrant(Debian)内で実行されています。

これからの勧告は大歓迎です。私はこれ以上何をするべきか本当に知りません。

25
devboxr

私はこの問題をGithubにも投稿しましたが、ドキュメントは少し誤解を招くことがわかりました。それは言います:

{
    "repositories": [
        {
            "type": "path",
            "url": "../../packages/my-package"
        }
    ],
    "require": {
        "my/package": "*"
    }
}

ただし、リリースのないローカルリポジトリがある場合は、以下を使用する必要があります。

{
    "repositories": [
        {
            "type": "path",
            "url": "../../packages/my-package"
        }
    ],
    "require": {
        "my/package": "dev-master"
    }
}

バージョン dev-masterはここのキーです(masterブランチで作業している場合)。これは少し腹立たしいものでしたが、助けてくれたcomposerの貢献者のおかげで、ついにこれを理解することができました。

これが将来誰かに役立つことを願っています。

幸運を!

52
devboxr

私のために働いたのは上記と非常に似ていましたが、私が開発していたブランチを明確にターゲットにしなければなりませんでした。

/ appと同じレベルのディレクトリ/ newapp内のコードと、feature/the-new-packageという名前のブランチの場合:

"repositories": [
  {
    "type": "path",
    "url": "newapp"
  }
],
"require": {
  "package/newapp": "dev-feature/the-new-package"
},

\ *は機能せず、dev-masterも機能しませんでした。 dev-feature/the-new-packageでなければなりませんでした。

1
Eric Vautier

今後のGoogle社員向けに、バージョンをcomposer.jsonそして、--prefer-sourceオプション。

例えば: composer require your-vendor/package:1.0.* --prefer-source

1
TylersSN