Composer: Autoload-Dateien - Laden Sie zuerst die Anbieter

Erstellt am 30. Juli 2012  ·  11Kommentare  ·  Quelle: composer/composer

Ich verwende das automatische Laden mit einem benutzerdefinierten Dateilader. Und ich habe ein Problem, weil mein Loader einige Klassen von Anbietern abhängig macht. Aber Komponisten benötigen meinen Loader vor dem Vendor Loader.

Hier wird autoloader.php generiert:

<?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;
});

Ich muss _Nette_ vor meinen libs (_Nella_) laden, da mein (_Nella_) Loader einige Klassen von _Nette_ benötigt.

Bug

Hilfreichster Kommentar

Wäre schön, die Reihenfolge definieren zu können. Oder noch besser: Sie haben eine zusätzliche Option, um Dateien zu definieren, die zuerst geladen werden müssen.

Anwendungsfall: Der Versuch, die Hilfsfunktionen von Laravel zu überschreiben, wie sie speziell in diesem Sinne definiert wurden, aber es gibt keine Möglichkeit, dem Komponisten mitzuteilen, dass meine Definition vor der nativen von Laravel stehen muss.

Kontext: https://laracasts.com/index.php/discuss/channels/general-discussion/override-functions-in-supporthelpersphp

Problemumgehung: https://github.com/funkjedi/composer-include-files

Alle 11 Kommentare

@Seldaek Ich denke, die Reihenfolge hier sollte die Reihenfolge

Ja, das macht Sinn, ich bin mir nicht sicher, wie einfach es ist, es zu erreichen, obwohl ich denke, dass es nach dem ersten Lauf ziemlich zufällig ist.

Ich bin nicht ganz sicher, ob ich das verstehe? Alle Autoloader werden benötigt, und dann sollte die Reihenfolge keine Rolle spielen?

Edit: egal ich verstehe es :)

Der Solver sollte diese bereits in der richtigen Reihenfolge in der Transaktion zurückgeben, einschließlich des Falls, wenn Pakete bereits installiert sind. Sie sind sich also nicht sicher, warum die Reihenfolge falsch wäre.

Ich habe gerade das gleiche Problem mit kdyby/forms-replicator erlebt

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

Die Reihenfolge von require in autoload_real.php sollte der Anforderung der Pakete entsprechen.

Das Update von @HosipLan wurde zusammengeführt .

Wie kann man markieren, dass unsere Bibliothek zuerst geladen werden soll?
Ich meine, es hing nicht von anderen ab, aber es sollte zuerst geladen werden, bevor etwas anderes geladen wird.

Ich habe die gleiche Frage wie @onlyongunz - Ich habe apigen/apigen und symfony/var-dumper global installiert, aber wenn ich die Version dump() von tracy/tracy (von ApiGen benötigt) wird genannt. Ich möchte die Version von VarDumper verwenden.

Wäre schön, die Reihenfolge definieren zu können. Oder noch besser: Sie haben eine zusätzliche Option, um Dateien zu definieren, die zuerst geladen werden müssen.

Anwendungsfall: Der Versuch, die Hilfsfunktionen von Laravel zu überschreiben, wie sie speziell in diesem Sinne definiert wurden, aber es gibt keine Möglichkeit, dem Komponisten mitzuteilen, dass meine Definition vor der nativen von Laravel stehen muss.

Kontext: https://laracasts.com/index.php/discuss/channels/general-discussion/override-functions-in-supporthelpersphp

Problemumgehung: https://github.com/funkjedi/composer-include-files

Nun, ich denke, ich werde load_first vorschlagen, um das Paket beim Laden zu priorisieren, wenn es nicht von einer anderen Bibliothek abhängt (es sei denn, es ist PHP oder etwas anderes), und --ignore-order hinzufügen, um das load_first zu ignorieren

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen