Gestione delle dipendenze con Composer

1,270 views

Published on

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

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,270
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
9
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Gestione delle dipendenze con Composer

  1. 1. Gestione delledipendenze con composer Massimiliano Arione PUG Roma, 26 novembre 2012
  2. 2. problemacome gestire le dipendenze?
  3. 3. soluzione 1a mano!
  4. 4. soluzione 2PEAR
  5. 5. soluzione 3nel versionamento svn:externals git submodule mercurial subrepo ...
  6. 6. soluzione 4script di gestione 2.0
  7. 7. LA soluzione
  8. 8. installazione$ curl -s https://getcomposer.org/installer | php$ sudo mv composer.phar /usr/local/bin/composer
  9. 9. uso$ composer install
  10. 10. 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.*" },}
  11. 11. un esempio
  12. 12. 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": { "PUGXAutocompleterBundle": "" } }, "target-dir": "PUGX/AutocompleterBundle"}
  13. 13. un esempio
  14. 14. a signo, è fatta!http://www.youtube.com/watch?v=DX_CcnN4i0k&t=5m25s
  15. 15. 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" } ]}
  16. 16. 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

×