Composer generiert keine Autoloads für die Bibliothek

8

Ich habe zwei Projekte eingerichtet, eine 'init' und eine Bibliothek, die von der init benötigt wird. Sie haben beide PSR-0-Autoloads eingestellt, aber die Autoload-Werte aus der Bibliothek werden nicht zum Hersteller / Composer / Autoload_namespaces.php im Init-Projekt hinzugefügt.

Beispiel composer.json aus der Bibliothek:

%Vor%

Beispiel composer.json aus dem Projekt, das diese Bibliothek benötigt:

%Vor%

Die Bibliothek enthält die Klasse LXP \ Library \ Something in der Datei src / LXP / Library / Something.php.

Das Projekt, das die Bibliothek benötigt, enthält die Klasse LXP \ Init \ Now in der Datei src / LXP / Init / Now.php.

Wenn composer install im 'init' -Projekt ausgeführt wird, lädt es das Bibliotheksprojekt herunter und fügt es korrekt in den Anbieter ein, aber vendor / composer / autoload_namespaces.php enthält nicht die Autoload-Informationen der Bibliothek, nur die des aktuellen Projekts.

Was mache ich falsch? Wenn ich dump-autoload im Bibliotheksprojekt ausführe, ist die Datei autoload_namespaces.php korrekt und ein schnelles Bootstrap-Skript bestätigt, dass es die Klasse tatsächlich aufnimmt.

EDIT - Dies ist ein Problem mit der satis-generated packages.json. Um es zu beheben, musste ich die Autoload-Informationen aus dem Composer.json der Bibliothek in die JSON-Datei einfügen, die ich an satis liefere, was wie eine unnötige Duplizierung aussieht und ich mache es wahrscheinlich falsch. Gibt es einen einzigen Ort, an dem automatisch geladene Informationen für satis-Bibliotheken gespeichert werden können? Kann z. B. die composer.json-Dateien in den überprüften Bibliotheken gelesen werden?

EDIT # 2 - Satis liest die composer.jsons nicht aus Repositories, die als 'package' Typ angegeben sind. Dies ist im Nachhinein offensichtlich, da 'Paket' für Bibliotheken verwendet wird, die keine composer.json haben, und es ist eine Möglichkeit, die komponentenähnliche Abhängigkeitsverwaltung um sie herum zu wickeln.

Wenn das Repository von satis.json in den Typ "vcs" geändert wurde, wurde composer.json gelesen und die Informationen (einschließlich der Autoload-Spezifikation) wurden analysiert und in packages.json gespeichert.

@Seldaek - vielen Dank, dass Sie vorgeschlagen haben, dass meine satis config das Problem ist, und ich hoffe, dass dies das Verhalten von satis / composer für jeden anderen in meiner Position verdeutlicht.

    
bmcgavin 06.05.2013, 22:06
quelle

3 Antworten

5

Ich sehe zwei mögliche Fehler, die Sie möglicherweise verursacht haben:

  • Sie haben vergessen, Ihre satis repo zu aktualisieren, damit die Autoload-Konfiguration für lxp / init dort nicht auf dem neuesten Stand ist
  • Sie führen die Installation von composer aus einer Sperrdatei aus. Das bedeutet, dass composer die Informationen nur aus der Datei composer.lock liest und die Metadaten des Pakets nicht auf die neueste in satis verfügbare Version aktualisiert. Um das Problem zu lösen, sollten Sie statt dessen composer update ausführen.
Seldaek 07.05.2013, 07:12
quelle
2

Versuchen Sie composer dump-autoload -Befehl.

    
kta 10.09.2015 10:08
quelle
0

Es hängt davon ab, wie Sie Ihre Bibliothek über Composer installieren. Wenn Sie es zum Beispiel als package type herunterladen (das gleiche gilt für composer type), weil Composer nie composer.json liest, müssen Sie stattdessen vcs type verwenden. Siehe: GH-6846 .

Hier ist composer.json was funktionieren sollte:

%Vor%

Dann starte: composer install .

Versuchen Sie zur Fehlerbehebung, Folgendes auszuführen:

  • composer dump-autoload -o -vvv .
  • composer diagnose -vvv
kenorb 27.11.2017 12:43
quelle