2013-05-06 14 views
8

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.

risposta

5

vedo due possibili errori che può aver fatto che potrebbe causare questo:

  • Hai dimenticato di aggiornare il repo satis in modo che il config autoload per LXP/init non è aggiornata in là
  • È stanno eseguendo l'installazione di compositore da un file di blocco e ciò significa che compositore legge semplicemente le informazioni dal file composer.lock e non aggiorna i metadati del pacchetto all'ultima versione disponibile in satis. Per risolvere questo problema, devi eseguire l'aggiornamento del compositore .
+0

@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

+0

@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

+1

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

2

Prova composer dump-autoload comando.

0

Dipende da come si installa la libreria tramite Compositore.Ad esempio se lo stai scaricando come tipo package (lo stesso credo con il tipo composer), come Compositore non legge mai il composer.json, devi invece usare il tipo vcs. Vedi: GH-6846.

Ecco composer.json che dovrebbe funzionare:

{ 
    "require": { 
    "lxp/library": "dev-master" 
    }, 
    "repositories": [ 
    { 
     "type": "vcs", 
     "url": "http://satis.repo.redacted/" 
    } 
    ] 
} 

Poi gestita: composer install.

Per la risoluzione dei problemi, provare a eseguire:

  • composer dump-autoload -o -vvv.
  • composer diagnose -vvv