Ho impostato due progetti, un 'init' e una libreria, che è richiesto da init. Entrambi hanno impostato il caricamento automatico della PSR-0, ma i valori di caricamento automatico dalla libreria non vengono aggiunti al fornitore/compositore/autoload_namespaces.php nel progetto init.Composer Not Generating Autoloads Per libreria
composer.json d'esempio della Biblioteca:
{
"name": "lxp/library",
"description": "A test library",
"autoload": {
"psr-0": {
"LXP\\Library": "src/"
}
}
}
campione composer.json dal progetto che richiede quella libreria:
{
"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"
}
}
La biblioteca contiene la classe LXP \ Libreria \ Qualcosa nel file src/LXP/Library/Something.php.
Il progetto che richiede la libreria contiene la classe LXP \ Init \ Now nel file src/LXP/Init/Now.php.
Quando si esegue l'installazione di composer nel progetto "init", scarica il progetto di libreria e lo inserisce nel fornitore correttamente, ma il venditore/compositore/autoload_namespaces.php non contiene le informazioni di caricamento automatico della libreria, solo quella del progetto corrente .
Cosa sto sbagliando? Se eseguo il dump-autoload nel progetto di libreria, il file autoload_namespaces.php è corretto e uno script di boot rapido conferma che effettivamente riprende la classe.
MODIFICA - Questo è un problema con packages.json generato da satis. Per risolvere il problema, ho dovuto aggiungere le informazioni sul caricamento automatico dal compositore.json della libreria nel file json fornito a satis, che sembra una duplicazione non necessaria e quindi probabilmente sto sbagliando. Esiste un singolo luogo in cui le informazioni di caricamento automatico possono essere archiviate per le librerie satis? Ad esempio, satis può leggere i file composer.json presenti nelle librerie che esegue la scansione?
EDIT # 2 - Satis non legge il compositore.js dai repository specificati come tipo 'pacchetto'. Questo è ovvio col senno di poi, perché 'pacchetto' è usato per le librerie che non hanno un compositore.json, ed è un modo per racchiudere la gestione delle dipendenze simile a un compositore.
Cambiare il repository di satis.json in "vcs" significava che il composer.json era stato letto e le informazioni (inclusa la specifica del caricamento automatico) erano state analizzate e memorizzate in packages.json.
@Seldaek - grazie per aver suggerito che il mio problema è stato il mio satis config, e spero che questo chiarisca il comportamento di satis/compositore per chiunque altro nella mia posizione.
@Seladek - la mia packages.json satis-generato non contiene alcuna informazione caricamento automatico, è vero dovrebbe? È stato rigenerato da quando sono state aggiunte le informazioni sul caricamento automatico della libreria. Poiché si tratta di un progetto su un banco di prova, sto distruggendo completamente il compositore tra le esecuzioni, eliminando composit.lock e la directory del fornitore e rieseguendo l'installazione di composer. – bmcgavin
@Seladek - tuttavia, posso confermare che l'aggiunta delle informazioni sul caricamento automatico direttamente a packages.json ha avuto l'effetto desiderato. Modifica la domanda originale ora. – bmcgavin
Penso che la risposta dipenda da come hai configurato satis. Se hai usato "type": "pacchetto", probabilmente non dovresti, perché deve essere usato solo con codice che non ha un compositore.json. Se invece dovresti usare un tipo "vcs", allora eseguirà la scansione del compositore.json del repository git e includerà correttamente le informazioni sul caricamento automatico nei pacchetti generati.json – Seldaek