「init」と、init に必要なライブラリの 2 つのプロジェクトをセットアップしました。どちらも PSR-0 オートロードが設定されていますが、ライブラリからのオートロード値は init プロジェクトの vendor/composer/autoload_namespaces.php に追加されていません。
ライブラリのサンプル composer.json:
{
"name": "lxp/library",
"description": "A test library",
"autoload": {
"psr-0": {
"LXP\\Library": "src/"
}
}
}
そのライブラリを必要とするプロジェクトの composer.json のサンプル:
{
"name": "lxp/init",
"name": "A test init",
"autoload": {
"psr-0": {
"LXP\\Init": "src/"
}
},
"repositories": [
{
"type": "composer",
"url": "http://satis.repo.redacted/"
}
],
"require": {
"lxp/library": "dev-master"
}
}
ライブラリには、ファイル src/LXP/Library/Something.php にクラス LXP\Library\Something が含まれています。
ライブラリを必要とするプロジェクトには、ファイル src/LXP/Init/Now.php にクラス LXP\Init\Now が含まれています。
「init」プロジェクトで composer install を実行すると、ライブラリ プロジェクトがダウンロードされ、ベンダーに正しく配置されますが、 vendor/composer/autoload_namespaces.php にはライブラリの自動ロード情報が含まれておらず、現在のプロジェクトの情報のみが含まれています。
私は何を間違っていますか?ライブラリ プロジェクトで dump-autoload を実行すると、autoload_namespaces.php ファイルは正しく、クイック ブートストラップ スクリプトによって、実際にクラスが取得されていることが確認されます。
編集 - これは、satis によって生成された packages.json の問題です。それを修正するには、ライブラリの composer.json から、satis に提供する json ファイルに autoload 情報を追加する必要がありました。これは不要な重複のように思われるため、おそらく間違っています。satis ライブラリのオートロード情報を保存できる単一の場所はありますか? たとえば、satis は、スキャンするライブラリに存在する composer.json ファイルを読み取ることができますか?
編集 #2 - Satis は、「パッケージ」タイプとして指定されたリポジトリから composer.jsons を読み取りません。「パッケージ」は composer.json を持たないライブラリに使用され、それらの周りに composer のような依存関係管理をラップする方法であるため、これは後から考えると明らかです。
satis.json のリポジトリを 'vcs' タイプに変更すると、composer.json が読み取られ、情報 (autoload 仕様を含む) が解析され、packages.json に格納されました。
@Seldaek - 私の satis 設定が問題であることを示唆していただきありがとうございます。これにより、私の立場にある他の誰かの satis / composer の動作が明確になることを願っています。