View
948
Download
2
Category
Preview:
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
Citation preview
Gestione delle dipendenze con
composerMassimiliano ArionePUG Roma, 26 novembre 2012
problema
come gestire le dipendenze?
soluzione 1
a mano!
soluzione 2
PEAR
soluzione 3
nel versionamento
svn:externalsgit submodule
mercurial subrepo...
soluzione 4
script di gestione
2.0
LA soluzione
installazione
$ curl -s https://getcomposer.org/installer | php
$ sudo mv composer.phar /usr/local/bin/composer
uso
$ composer install
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.*" },}
un esempio
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"}
un esempio
a signo', è fatta!
http://www.youtube.com/watch?v=DX_CcnN4i0k&t=5m25s
bonus: repo privati
{ "require": { "pippo/mio-repo": "3.*", "pluto/altro-repo": "2.*" } "repositories": [ { "type": "vcs", "url": "git@bitbucket.org:pippo/repo.git" }, { "type": "vcs", "url": "http://svn.example.org/repo" }
]}
grazie!creditshttp://upload.wikimedia.org/wikipedia/commons/4/4d/Dependency_network_for_financial_data.jpghttp://static.guide.supereva.it/guide/sogni/trasloco.jpghttp://pear.php.net/downloads/pear-folder.svghttp://getcomposer.org/img/logo-composer-transparent.pnghttp://verdonepedia.xoom.it/Bianco_rosso_e_verdone/Mario_Brega_Bianco_rosso_e_verdone.jpg
http://www.slideshare.net/garak
Recommended