Composer: ファイルの自動ロード-最初にベンダーをロードします

作成日 2012年07月30日  ·  11コメント  ·  ソース: composer/composer

カスタムファイルローダーで自動読み込みを使用しています。 また、ローダーがベンダーの一部のクラスに依存しているため、問題が発生します。 しかし、composerはベンダーローダーの前に私のローダーを必要とします。

ここで生成されるautoloader.php

<?php

// autoload.php generated by Composer
if (!class_exists('Composer\\Autoload\\ClassLoader', false)) {
    require __DIR__ . '/composer' . '/ClassLoader.php';
}

return call_user_func(function() {
    $loader = new \Composer\Autoload\ClassLoader();
    $composerDir = __DIR__ . '/composer';

    $map = require $composerDir . '/autoload_namespaces.php';
    foreach ($map as $namespace => $path) {
        $loader->add($namespace, $path);
    }

    $classMap = require $composerDir . '/autoload_classmap.php';
    if ($classMap) {
        $loader->addClassMap($classMap);
    }

    $loader->register();

    require $baseDir . '/Nella/loader.php'; // <-- my libs
    require $vendorDir . '/nette/nette/Nette/loader.php'; // <-- vendor libs

    return $loader;
});

(_Nella_)ローダーには_Nette_のクラスが必要なため、libs(_Nella_)の前に_Nette_をロードする必要があります。

Bug

最も参考になるコメント

順序を定義できると便利です。 またはさらに良い:最初にロードする必要があるファイルを定義するための追加オプションがあります。

ユースケース:laravelのヘルパー関数は、それを念頭に置いて具体的に定義されているため、オーバーライドしようとしていますが、私の定義がlaravelのネイティブ関数よりも前にある必要があることを作曲家に伝える方法はありません。

コンテキスト: https

回避策: https

全てのコメント11件

@Seldaekここでの順序は、依存関係を解決するときに見つかった順序を尊重する必要があると思います。そのため、依存関係の自動読み込みファイルは、それに依存するパッケージのファイルの前に読み込まれます。

うん、それは理にかなっている、最初の実行後はかなりランダムだと思うが、それがどれほど簡単に達成できるかはわからない。

私はこれを取得するかどうか完全にわかりませんか? すべてのオートローダーが必要になりますが、順序は重要ではありませんか?

編集:私がそれを得るのを気にしないでください:)

ソルバーは、パッケージがすでにインストールされている場合を含め、トランザクションでこれらを正しい順序で返す必要があるため、順序が正しくない理由がわかりません。

kdyby/forms-replicator同じ問題が発生しました

{
    "name":"kdyby/forms-replicator",
    "require":{
        "php":">=5.3.2",
        "nette/nette":"*"
    },
    "autoload":{
        "files":["Replicator.php"]
    }
}

順序requireautoload_real.phpパッケージがお互いを必要とどのように対応すべきです。

@HosipLanの修正をマージし

libを最初にロードする必要があることをマークするにはどうすればよいですか?
つまり、他に依存していませんが、他のものをロードする前に最初にロードする必要があります。

@onlyongunzと同じ質問がありapigen/apigensymfony/var-dumperをグローバルにインストールしましたが、 tracy/tracyからdump()バージョンを使用する場合(ApiGenで必要)と呼ばれます。 VarDumperのバージョンを使用したい。

順序を定義できると便利です。 またはさらに良い:最初にロードする必要があるファイルを定義するための追加オプションがあります。

ユースケース:laravelのヘルパー関数は、それを念頭に置いて具体的に定義されているため、オーバーライドしようとしていますが、私の定義がlaravelのネイティブ関数よりも前にある必要があることを作曲家に伝える方法はありません。

コンテキスト: https

回避策: https

さて私はsugestと思うload_first 、それは(それのPHPや他の何かがない限り)他のliblaryに依存し、追加しなかったときの負荷にパッケージを優先する--ignore-order無視するようにload_first

このページは役に立ちましたか?
0 / 5 - 0 評価