Ustawiłem dwa projekty, "init" i bibliotekę, która jest wymagana przez init. Oba mają zestaw autoload PSR-0, ale wartości autoloadowe z biblioteki nie są dodawane do dostawcy/composer/autoload_namespaces.php w projekcie init.Kompozytor nie generuje autoload dla biblioteki
Próbka composer.json z Biblioteki:
{
"name": "lxp/library",
"description": "A test library",
"autoload": {
"psr-0": {
"LXP\\Library": "src/"
}
}
}
Próbka composer.json z projektu, który wymaga tej biblioteki:
{
"name": "lxp/init",
"name": "A test init",
"autoload": {
"psr-0": {
"LXP\\Init": "src/"
}
},
"repositories": [
{
"type": "composer",
"url": "http://satis.repo.redacted/"
}
],
"require": {
"lxp/library": "dev-master"
}
}
Biblioteka zawiera klasę LXP \ Library \ coś w plik src/LXP/Library/Something.php.
Projekt wymagający biblioteki zawiera klasę LXP \ Init \ Now w pliku src/LXP/Init/Now.php.
Po uruchomieniu kompozytor w projekcie "init", pobiera projekt biblioteki i umieszcza go w dostawcy poprawnie, ale vendor/composer/autoload_namespaces.php nie zawiera informacji autoload biblioteki, tylko ten z bieżącego projektu .
Co robię źle? Jeśli uruchomię dump-autoload w projekcie bibliotecznym, plik autoload_namespaces.php jest poprawny, a szybki skrypt bootstrap potwierdza, że rzeczywiście pobiera klasę.
EDYCJA - Jest to problem związany z pakietami sats.json. Aby to naprawić, musiałem dodać informacje z autoloadu z pliku composer.json biblioteki do pliku json, który dostarczam do satis, co wydaje się niepotrzebnym duplikowaniem i prawdopodobnie robię to źle. Czy istnieje jedno miejsce, w którym można zapisać automatyczne informacje dla bibliotek satis? Na przykład, czy satis może odczytać pliki composer.json znajdujące się w bibliotekach, które skanuje?
EDYCJA # 2 - Satis nie czyta pliku composer.jsons z repozytoriów określonych jako "pakiet". Jest to oczywiste z perspektywy czasu, ponieważ "pakiet" jest używany w bibliotekach, które nie mają composer.json i jest sposobem na owijanie wokół nich zależności zależnych od kompozytora.
Zmiana repozytorium satis.json na typ "vcs" oznaczała, że plik composer.json został odczytany, a informacje (w tym specyfikacja autoload) zostały przeanalizowane i zapisane w pliku packages.json.
@Seldaek - dziękuję za sugestię, że moja konfiguracja satis była problemem, i mam nadzieję, że to wyjaśni zachowanie satis/composer dla kogokolwiek innego na mojej pozycji.
@Seladek - mój satis generowane packages.json nie zawiera żadnych informacji automatycznego ładowania, jest to ma? Został zregenerowany od czasu dodania informacji automatycznych biblioteki. Ponieważ jest to projekt testowy, kompletnie rozkładam kompozytor pomiędzy kolejnymi uruchomieniami, usuwając composer.lock i katalog dostawców i ponownie instaluję instalatora. – bmcgavin
@Seladek - jednak mogę potwierdzić, że dodanie automatycznych informacji bezpośrednio do packages.json przyniosło oczekiwany efekt. Edycja oryginalnego pytania już teraz. – bmcgavin
Myślę, że teraz odpowiedź zależy od tego, jak skonfigurowałeś satis. Jeśli użyłeś "type": "package", to prawdopodobnie nie powinieneś, ponieważ to musi być używane tylko z kodem, który nie ma composer.json. Jeśli tak, to powinieneś użyć typu "vcs", a następnie przeskanuje plik composer.json repozytorium git i poprawnie wstawi informacje o autoloadach w wygenerowanych pakietach. Json – Seldaek