Ich habe ein paar Bibliotheken [Foo und Bar], die ich gemeinsam entwickle, aber technisch immer noch getrennte Dinge. Früher habe ich den Autoloader so neu definiert, dass er gefällt "Foo\\": "../Foo/src"
, aber jetzt, da ich Foo eine Guzzle-Abhängigkeit hinzugefügt habe, klappt Bar den Deckel um, weil es keine seiner Abhängigkeiten ist.
Verzeichnisaufbau:
/home/user/src/
Foo/
src/
FooClient.php
composer.json
Bar/
src/
BarClient.php
composer.json
Theoretische Autoload-Anweisung: [in Bar / composer.json]
"require": {
"local": "../Foo/composer.json"
}
Beispielcode:
require('vendor/autoload.php');
$f = new \Bar\BarClient(new \Foo\FooClient());
Wie kann ich das beheben, ohne ein lokales Composer-Repo einzurichten? Ich möchte diese als separate Pakete verwalten, nur dass eines das andere benötigt und daher die Abhängigkeiten des anderen verarbeitet.
Nachbearbeitung bearbeiten:
Dank Infomaniac habe ich Folgendes getan:
Initialisiert das Git Repo:
cd ~/src/Foo && git init && echo -e "vendor\ncomposer.lock" > .gitignore && git add ./ && git commit -m "Initial Commit"
Die Composer-Konfiguration wurde hinzugefügt:
"require": {
"sammitch/foo": "dev-master"
},
"repositories": [{
"type": "vcs",
"url": "/home/sammitch/src/Foo"
}],
Und dann composer update
!
sammitch/foo
ist der Paketname und hat buchstäblich nichts damit zu tun, wo er sich befindet. Erstellt eine Liste der verfügbaren Pakete basierend auf den konfigurierten Repos. In diesem Fall wird die Datei composer.json aus dem angegebenen lokalen Git-Repo abgerufen, und der Rest erledigt den Composer. Das sammitch/foo
Paket wird vendor
wie jedes andere Paket in den Ordner der aktuellen App kopiert .