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.
Ich sehe zwei mögliche Fehler, die Sie möglicherweise verursacht haben:
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:
Dann starte: composer install
.
Versuchen Sie zur Fehlerbehebung, Folgendes auszuführen:
composer dump-autoload -o -vvv
. composer diagnose -vvv
Tags und Links php autoload composer-php psr-0 satis