2016-01-11 15 views
15

Recentemente, ho installato il pacchetto LaravelFacebookSdk.Come installare correttamente il pacchetto in Laravel?


Installare

aggiorno il mio composer.json aggiungendo

"sammyk/laravel-facebook-sdk": "~3.0" 

Poi, corro composer update


Service Provider

Nel mio /config/app.php, aggiungo lo LaravelFacebookSdkServiceProvider all'array dei provider.

'providers' => [ 
    SammyK\LaravelFacebookSdk\LaravelFacebookSdkServiceProvider::class, 
    ]; 

Tutto funziona alla grande. Quindi, l'ho spinto nel mio repository.


Ecco il problema!

Secondo lo sviluppatore in arrivo ha fatto un git pull ed eseguire composer update

Egli otterrà un errore

SammyK\LaravelFacebookSdk\LaravelFacebookSdkServiceProvider::class, 

è undefine. perché, l'ho dichiarato nel mio /config/app.php sotto il mio array di provider.

Devo andare commentare la riga ed eseguire prima il composer update. Dopo aver installato tutto correttamente, quindi tornare indietro e decommentare quella riga di nuovo.

Ogni altro sviluppatore dovrà fare questo ogni volta, abbiamo installato un nuovo pacchetto?

Mi manca qualcosa qui?

Si prega di avvisare gentilmente se ho fatto qualcosa di sbagliato.

+1

Non dovrebbe essere necessario decommentare la linea, ma sarà necessario eseguire l'aggiornamento di Composer ogni volta che si aggiunge un nuovo pacchetto. – aynber

+0

Durante l'esecuzione dell'aggiornamento del compositore, ha ricevuto l'errore. – ihue

+1

sì. Credo che sia quello che fanno tutti. commentare, aggiornare quindi il commento. – Arunu

risposta

10

Il problema è che esiste un comando php artisan clear-compiled configurato per l'esecuzione prima del processo di aggiornamento nel file composer.json. E poiché artisan è parte integrante dell'applicazione di Laravel, si lamenterà quando c'è qualcosa di sbagliato nel codice dell'app. Dato che hai un riferimento a una classe che non è ancora presente, sputerà quello RuntimeException. È possibile risolvere questo problema spostando il comando dall'elenco pre-update-cmd all'elenco post-update-cmd nel numero composer.json.

Quindi cambiare questo:

"scripts": { 
    ... 
    "pre-update-cmd": [ 
     "php artisan clear-compiled" 
    ], 
    "post-update-cmd": [ 
     "php artisan optimize" 
    ] 
}, 

A tal:

"scripts": { 
    ... 
    "pre-update-cmd": [ 
    ], 
    "post-update-cmd": [ 
     "php artisan clear-compiled", 
     "php artisan optimize" 
    ] 
}, 

Ora il comando clear-compiled sarà eseguito dopo che il processo di aggiornamento, quando il riferimento LaravelFacebookSdkServiceProvider classe è presente, quindi non più errori.

+0

@ihue Bogdan ha ragione su quale sia il problema, ma mi raccomando invece di modificare il file compositore.json dovresti eseguire l'installazione di compositore (o aggiornamento) prima di aggiornare il tuo file app.php. – jfadich

+0

@jfadich Il pacchetto viene installato aggiungendolo a 'composer.json' e' app.php', quindi viene inviato a un server git. Poi un altro sviluppatore tirerà quel codice, ma dovrà eseguire 'compositing update' per installare la libreria su' vendor', tuttavia a questo punto la configurazione di 'app.php' è già in atto, quindi quello che stai suggerendo funzionerà solo per lo sviluppatore che installa inizialmente il pacchetto. Tutti gli altri sviluppatori che estraggono il nuovo codice avranno l'array '$ providers' aggiornato ma non il codice della libreria. – Bogdan

+1

@Bogdan Gli altri sviluppatori non dovrebbero eseguire "compositore update". Dovrebbero eseguire "installer install". L'aggiornamento del compositore passerà attraverso e aggiornerà tutti i pacchetti che non è quello che vuoi quando stai aggiornando l'installazione con il repository – jfadich

4

Invece di eseguire composer update eseguire composer install. Non è necessario modificare i comandi nel file json.

Quando si esegue composer update, passerà attraverso tutti i pacchetti e si aggiornerà alla versione secondaria più recente basata su composer.json, quindi aggiornerà il compositore.lock. Questo non è quello che vuoi.

Quando si esegue composer install, si assicura che tutto nel file JSON sia installato, inclusi i pacchetti appena aggiunti. Questo è quello che stai cercando.

Problemi correlati