私が共同で開発しているライブラリ[Foo and Bar]がいくつかありますが、それでも技術的には別のものです。以前はオートローダーをlike "Foo\\": "../Foo/src"
に再定義しただけですが、FooにGuzzle依存関係を追加したので、Barは依存関係の1つではないため、ふたを反転します。
ディレクトリ構造:
/home/user/src/
Foo/
src/
FooClient.php
composer.json
Bar/
src/
BarClient.php
composer.json
理論的なオートロードステートメント:[Bar / composer.json内]
"require": {
"local": "../Foo/composer.json"
}
コード例:
require('vendor/autoload.php');
$f = new \Bar\BarClient(new \Foo\FooClient());
ローカルComposerリポジトリを設定せずにこれを解決するにはどうすればよいですか?これらを個別のパッケージとして維持したいのですが、一方がもう一方を必要とするだけであり、そのため他方の依存関係を処理します。
回答後の編集:
infomaniacのおかげで、次のことができました。
gitリポジトリを初期化:
cd ~/src/Foo && git init && echo -e "vendor\ncomposer.lock" > .gitignore && git add ./ && git commit -m "Initial Commit"
composer設定を追加しました:
"require": {
"sammitch/foo": "dev-master"
},
"repositories": [{
"type": "vcs",
"url": "/home/sammitch/src/Foo"
}],
そしてcomposer update
!
sammitch/foo
はパッケージ名であり、文字通り、パッケージの場所とは関係ありません。構成されたリポジトリに基づいて使用可能なパッケージのリストを作成します。この場合、指定されたローカルgitリポジトリからcomposer.jsonをフェッチし、composerが残りを処理します。sammitch/foo
パッケージは、現在のアプリケーションのにコピーされvendor
、他のパッケージと同じフォルダ。