gestione delle dipendenze con composer

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

Upload: massimiliano-arione

Post on 26-Jun-2015

948 views

Category:

Technology


2 download

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

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" }

]}