私は次のようなディレクトリ構造を持っています:
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)内で実行されています。
これからの勧告は大歓迎です。私はこれ以上何をするべきか本当に知りません。
私はこの問題を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の貢献者のおかげで、ついにこれを理解することができました。
これが将来誰かに役立つことを願っています。
幸運を!
私のために働いたのは上記と非常に似ていましたが、私が開発していたブランチを明確にターゲットにしなければなりませんでした。
/ 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でなければなりませんでした。
今後のGoogle社員向けに、バージョンをcomposer.json
そして、--prefer-source
オプション。
例えば: composer require your-vendor/package:1.0.* --prefer-source