13

「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 の動作が明確になることを願っています。

4

3 に答える 3

8

コマンドを試してくださいcomposer dump-autoload

于 2015-09-10T10:08:32.357 に答える