Gestione delle dipendenze con Composer

16
Gestione delle dipendenze con composer Massimiliano Arione PUG Roma, 26 novembre 2012

description

2. Il problema della gestione delle dipendenze affligge da tempo qualsiasi sviluppatore che non voglia reinventare la ruota. Questo problema può essere affrontato da due punti di vista: quello dello sviluppatore che ha bisogno di usare una libreria e quello dello sviluppatore che ha creato la propria libreria e vuole distribuirla 3. Una prima possibile soluzione al problema è: scaricare i sorgenti della libreria e installarli a mano. Questa soluzione ovviamente è molto scomoda e ha molti difetti: difficoltà di manutenzione, difficoltà di replicazione, difficoltà o impossibilità di versionamento. È stata mostrata solo per motivi "storici" 4. PEAR è stato per molto tempo lo standard de facto per la gestione delle librerie. Il suo problema principale era nella necessità di dover installare le librerie a livello di sistema, mentre spesso è necessario gestire versioni diverse su progetti diversi. Un altro problema è che è rimasto poco sviluppato e ancorato alla compatibilità con PHP4 5. Un altra possibile soluzione è la gestione delle dipendenze nel sistema di versioanmento: externals per subversion, submoduli per git, eccetera. Difetti di questo approccio: lo sviluppatore di librerie dovrebbe tenere un repository per ogni sistema, l'utilizzatore è costretto a gestire in contemporanea aggiornamenti delle revisioni del suo progetto e aggiornamenti delle librerie 6. Un approccio più recente e interessante è stato quello adottato da Symfony 2.0, cioè uno script di gestione scritto ad hoc. Purtroppo non era in grado di gestire le dipendenze indirette ed era legato strettamente a git 8. Il primo passo per usare Composer è installarlo. La procedura è molto semplice, trattandosi di uno script PHP da linea di comando: basta scaricare l'installer ed eseguirlo. Non obbligatorio, ma consigliato, spostare l'eseguibile sotto a un percorso incluso in $PATH. Pper sistemi non Unix-compatibili... non lo so! Arrangiatevi 9. L'installazione delle librerie è facile: basta eseguire il comando seguito dal parametro "install". Occorre però preparare un file di configurazione 10. Questo esempio di file di configurazione di Composer è tratto da Symfony Standard Edition, con alcune righe tagliate per questioni di spazio. 11. Vediamo ora un esempio su come pubblicare la propria libreria, tratta da un caso reale; un bundle per Symfony2 creato sotto PUGX. Il primo passo è quello di pubblicare il progetto su github 12. Questo è il file composer.json del bundle, con le sue dipendenze e le impostazioni per l'autoloading 13. Il passo successivo consiste nel pubblicare la libreria su Packagist, configurando le impostazioni relative all'integrazione con github 14. Tutto qui! Come direbbe il Principe, è fatta! Non serve niente di più di questo, è molto facile e consente di gestire dipendenze a cascata. 15. Ma se io avessi l'esigenza di usare una libreria che non è open source e quindi non posso mettere su github? Si possono impostare altri reposi

Transcript of Gestione delle dipendenze con Composer

Page 1: Gestione delle dipendenze con Composer

Gestione delle dipendenze con

composerMassimiliano ArionePUG Roma, 26 novembre 2012

Page 2: Gestione delle dipendenze con Composer

problema

come gestire le dipendenze?

Page 3: Gestione delle dipendenze con Composer

soluzione 1

a mano!

Page 4: Gestione delle dipendenze con Composer

soluzione 2

PEAR

Page 5: Gestione delle dipendenze con Composer

soluzione 3

nel versionamento

svn:externalsgit submodule

mercurial subrepo...

Page 6: Gestione delle dipendenze con Composer

soluzione 4

script di gestione

2.0

Page 7: Gestione delle dipendenze con Composer

LA soluzione

Page 8: Gestione delle dipendenze con Composer

installazione

$ curl -s https://getcomposer.org/installer | php

$ sudo mv composer.phar /usr/local/bin/composer

Page 9: Gestione delle dipendenze con Composer

uso

$ composer install

Page 10: Gestione delle dipendenze con Composer

composer.json

{ "name": "symfony/framework-standard-edition", "require": { "php": ">=5.3.3", "symfony/symfony": "2.2.*", "doctrine/orm": ">=2.2.3,<2.4-dev", "doctrine/doctrine-bundle": "1.0.*", "twig/extensions": "1.0.*", "symfony/assetic-bundle": "2.1.*", "symfony/swiftmailer-bundle": "2.1.*", "symfony/monolog-bundle": "2.1.*", "sensio/distribution-bundle": "2.2.*", "sensio/framework-extra-bundle": "2.2.*", "sensio/generator-bundle": "2.2.*", "jms/security-extra-bundle": "1.4.*", "jms/di-extra-bundle": "1.3.*" },}

Page 11: Gestione delle dipendenze con Composer

un esempio

Page 12: Gestione delle dipendenze con Composer

un esempio

{ "name": "pugx/autocompleter-bundle", "type": "symfony-bundle", "description": "Add an autocomplete type to forms", "license": "LGPL-3.0+", "minimum-stability": "dev", "require": { "symfony/framework-bundle": "2.1.*", "doctrine/orm": ">=2.2,<2.4-dev", "symfony/form": "2.1.*" }, "autoload": { "psr-0": { "PUGX\\AutocompleterBundle": "" } }, "target-dir": "PUGX/AutocompleterBundle"}

Page 13: Gestione delle dipendenze con Composer

un esempio

Page 14: Gestione delle dipendenze con Composer

a signo', è fatta!

http://www.youtube.com/watch?v=DX_CcnN4i0k&t=5m25s

Page 15: Gestione delle dipendenze con Composer

bonus: repo privati

{ "require": { "pippo/mio-repo": "3.*", "pluto/altro-repo": "2.*" } "repositories": [ { "type": "vcs", "url": "[email protected]:pippo/repo.git" }, { "type": "vcs", "url": "http://svn.example.org/repo" }

]}