SlideShare ist ein Scribd-Unternehmen logo
1 von 25
Downloaden Sie, um offline zu lesen
P Dependency und P
 HP                aket
Management mit Composer

Dominik Liebler I 22. März 2012




                                  © Mayflower GmbH 2012
Dependency Management, warum eigentlich?



I Abhängigkeiten
    Framework (ZF Symfony2, ...)
                 ,
    OR  M
    AP Clients
       I
I Code Reusability
    Rauslösen von wiederverwendbarem Code
    viele kleine Libraries statt Framework Monolithen
    DR und Don't reinvent the wheel!
       Y




                                                        Mayflower GmbH I 2
Warum nicht PEAR verwenden?



I globale Installation von Paketen
I schwierige Kontrolle der Paketversionen im Projekt
I QA Prozess bei pear.php.net
    Coding Standards
    RFCs
I Aufsetzen eines PEARChannels zeitaufwändig und nicht einfach
  genug




                                                             Mayflower GmbH I 3
Composer!




            Mayflower GmbH I 4
Warum Composer?



I lokale Installation von Paketen
I Config im Repository
    gleiche Versionen bei jedem Developer
    Dependencies an zentraler Stelle dokumentiert
I direkter Zugriff auf git, svn, tar.gz files
I zentrales Repository/ Channel nicht zwingend benötigt




                                                          Mayflower GmbH I 5
2 Teile



I Composer                      IPackagist


     Dependency Manager             Default Paketrepository

     http:/ / getcomposer.org       http:/ / packagist.org




                                                              Mayflower GmbH I 6
History



I Start: ~April 2011
I Einflüsse: npm (node.js) und bundler (Ruby)
I Wurzeln in der Symfony2 Community
    wird seit Anfang 2012 für Symfony2 verwendet
I > 400 Pakete auf packagist.org
I Github Service Hook für Packagist




                                                   Mayflower GmbH I 7
Composer Architektur



I einzelnes PHARPaket
I simple JSON Configs
I bedient externe Tools für VCS
I kann git, svn, hg, zip, tar.gz, etc.
I benutzt AP von Github, Bitbucket
            Is




                                         Mayflower GmbH I 8
Installation


curl -s http://getcomposer.org/installer | php




                                        Mayflower GmbH I 9
Paketkonfigurationen




                       Mayflower GmbH I 10
Beispiel: Paket von Packagist (composer.json)




{
"require": {
"doctrine/couchdb": "*"
}
}




                                                Mayflower GmbH I 11
Pakete installlieren


php composer.phar install




                            Mayflower GmbH I 12
Beispiel: Paket von Github




{
    "repositories": [
        {
            "type": "vcs",
            "url": "https://github.com/nrk/predis"
        }
    ],
    "require": {
        "predis/predis": "v0.7.0"
    }
}


                                                     Mayflower GmbH I 13
Pakete updaten


php composer.phar update




                           Mayflower GmbH I 14
Beispiel: Paket von PEAR




{
    "repositories": [
        {
            "type": "pear",
            "url": "http://pear2.php.net"
        }
    ],
    "require": {
        "pear-pear2/PEAR2_HTTP_Request": "*"
    }
}


                                               Mayflower GmbH I 15
Beispiel: Paket von Subversion

{
    "repositories": [{
          "type": "package",
          "package": {
              "name": "zend/framework",
              "version": "1.11.11",
              "source": {
                  "url": "http://framework.zend.com/svn/framework/standard",
                  "type": "svn",
                  "reference": "tags/release-1.11.11/"
              }
          }
    }],
    "require": { "zend/framework": "1.11.*" }
}

                                                                   Mayflower GmbH I 16
Beispiel: ZIP Datei


{
    "repositories": [{
          "type": "package",
          "package": {
              "name": "smarty/smarty",
              "version": "3.1.7",
              "dist": {
                  "url": "http://www.smarty.net/files/Smarty-3.1.7.zip",
                  "type": "zip"
              }
          }
    }],
    "require": { "smarty/smarty": "3.1.*" }
}


                                                                  Mayflower GmbH I 17
Autoloading: PSR-0



I P -0 Standard
   SR
    Klasse  F Bar in Datei / project/ F Bar.php
              oo                       oo/
I Classloader wird generiert
    vendor/.composer/autoload.php
    vendor/.composer/autoload_namespaces.php

I Einbinden:
    require 'vendor/.composer/autoload.php';




                                                   Mayflower GmbH I 18
Wiederverwendbarer Code?



     =eigenes Package!




                           Mayflower GmbH I 19
Beispiel: UUID library


{
    "name": "domnikl/uuid",
    "type": "library",
    "description": "UUID generator class for PHP",
    "keywords": ["uuid"],
    "homepage": "http://www.mayflower.de",
    "license": "MIT",
    "authors": [
         {"name": "Dominik Liebler", "email": "dominik.liebler@mayflower.de"}
    ],
    "require": { "php": ">=5.3.0" },
    "autoload": { "psr-0": { "MayflowerUuid": "lib/" } }
}



                                                                   Mayflower GmbH I 20
eigene Repositories




                      Mayflower GmbH I 21
Satis



I Symfony2 Console Anwendung
I lightweight
I erzeugt Static Repositories
I lagert Paketquellen aus (packages.json)
I für kleine Projekte geeignet
I https:/ / github.com/ composer/ satis




                                            Mayflower GmbH I 22
Packagist



I Symfony2 und Doctrine2 Webanwendung
I MySQL, PostgreSQL, SQLite, etc.
I crawlt Pakete selbstständig
I Sources: git, svn, hg
I Suche nach Paketen
I https:/ / github.com/ composer/ packagist




                                              Mayflower GmbH I 23
Packagist




            Mayflower GmbH I 24
Vielen Dank für Ihre Aufmerksamkeit!




      Referent   Dominik Liebler
                 dominik.liebler@mayflower.de
                 +49 931 35965 1180
                 Mayflower GmbH
                 Gneisenaustraße 10/ 11
                 97074 Würzburg
                 @domnikl
29.03.12                                  Mayflower GmbH   25

Weitere ähnliche Inhalte

Andere mochten auch

Gesellschaftliche Integration und Mitwirkung im Kontext des hohen Alters
Gesellschaftliche Integration und Mitwirkung im Kontext des hohen AltersGesellschaftliche Integration und Mitwirkung im Kontext des hohen Alters
Gesellschaftliche Integration und Mitwirkung im Kontext des hohen Alters
Seniorenforum Würzburg und Umgebung
 
Presentación1
Presentación1Presentación1
Presentación1
nerea1n
 
Metabolismo
MetabolismoMetabolismo
Metabolismo
SergioEA
 
Interacciones o looping4
Interacciones o looping4Interacciones o looping4
Interacciones o looping4
dierco1
 
Matriz planificador grupo f
Matriz planificador grupo fMatriz planificador grupo f
Matriz planificador grupo f
luanre
 
Barriere freiosm karten80
Barriere freiosm karten80Barriere freiosm karten80
Barriere freiosm karten80
GOMOGI
 

Andere mochten auch (20)

Das Halten von Kunden
Das Halten von KundenDas Halten von Kunden
Das Halten von Kunden
 
Mainova AG und die Kontaktstrategie des Kundenmanagements
Mainova AG und die Kontaktstrategie des KundenmanagementsMainova AG und die Kontaktstrategie des Kundenmanagements
Mainova AG und die Kontaktstrategie des Kundenmanagements
 
Kundenbindungs Konzept
Kundenbindungs KonzeptKundenbindungs Konzept
Kundenbindungs Konzept
 
„Digitalisierung des Bankgeschäfts, Kundenbindung durch Ökosysteme“ – möglich?
„Digitalisierung des Bankgeschäfts, Kundenbindung durch Ökosysteme“ – möglich?„Digitalisierung des Bankgeschäfts, Kundenbindung durch Ökosysteme“ – möglich?
„Digitalisierung des Bankgeschäfts, Kundenbindung durch Ökosysteme“ – möglich?
 
Kundenservice 2.0 im B2B - Beispiel IT-Branche
Kundenservice 2.0 im B2B -  Beispiel IT-BrancheKundenservice 2.0 im B2B -  Beispiel IT-Branche
Kundenservice 2.0 im B2B - Beispiel IT-Branche
 
Gesellschaftliche Integration und Mitwirkung im Kontext des hohen Alters
Gesellschaftliche Integration und Mitwirkung im Kontext des hohen AltersGesellschaftliche Integration und Mitwirkung im Kontext des hohen Alters
Gesellschaftliche Integration und Mitwirkung im Kontext des hohen Alters
 
Presentación1
Presentación1Presentación1
Presentación1
 
Postrelandía
PostrelandíaPostrelandía
Postrelandía
 
Colegio nacional nicolás es guerra
Colegio nacional nicolás es guerra Colegio nacional nicolás es guerra
Colegio nacional nicolás es guerra
 
Metabolismo
MetabolismoMetabolismo
Metabolismo
 
Interacciones o looping4
Interacciones o looping4Interacciones o looping4
Interacciones o looping4
 
Matriz planificador grupo f
Matriz planificador grupo fMatriz planificador grupo f
Matriz planificador grupo f
 
Manual de el uso de entradas en wordpress
Manual de el uso de entradas en wordpressManual de el uso de entradas en wordpress
Manual de el uso de entradas en wordpress
 
Unidad 4
Unidad 4Unidad 4
Unidad 4
 
Barriere freiosm karten80
Barriere freiosm karten80Barriere freiosm karten80
Barriere freiosm karten80
 
Modalidades de importacion parte 3
Modalidades de importacion parte 3Modalidades de importacion parte 3
Modalidades de importacion parte 3
 
Donde están mis valores
Donde están mis valoresDonde están mis valores
Donde están mis valores
 
Trabajo Escrito
Trabajo EscritoTrabajo Escrito
Trabajo Escrito
 
Das war Kobuk, Sommersemester 2010
Das war Kobuk, Sommersemester 2010Das war Kobuk, Sommersemester 2010
Das war Kobuk, Sommersemester 2010
 
Windos 7
Windos 7Windos 7
Windos 7
 

Ähnlich wie PHP Dependency und Paket Management mit Composer

FastCGI Process Manager
FastCGI Process ManagerFastCGI Process Manager
FastCGI Process Manager
Mayflower GmbH
 
Grundlagen puppet
Grundlagen puppetGrundlagen puppet
Grundlagen puppet
inovex GmbH
 

Ähnlich wie PHP Dependency und Paket Management mit Composer (20)

FastCGI Process Manager
FastCGI Process ManagerFastCGI Process Manager
FastCGI Process Manager
 
Ausrollen von Multi-Tier-Applikationen mit Docker
Ausrollen von Multi-Tier-Applikationen mit DockerAusrollen von Multi-Tier-Applikationen mit Docker
Ausrollen von Multi-Tier-Applikationen mit Docker
 
C++ Dependency Management 2.0
C++ Dependency Management 2.0C++ Dependency Management 2.0
C++ Dependency Management 2.0
 
Backbone.js
Backbone.jsBackbone.js
Backbone.js
 
FMK2019 FileMaker Data API mit Node.js nutzen - Workshop by Adam Augustin
FMK2019 FileMaker Data API mit Node.js nutzen - Workshop by Adam AugustinFMK2019 FileMaker Data API mit Node.js nutzen - Workshop by Adam Augustin
FMK2019 FileMaker Data API mit Node.js nutzen - Workshop by Adam Augustin
 
PHP-Applikationen mit PEAR
PHP-Applikationen mit PEARPHP-Applikationen mit PEAR
PHP-Applikationen mit PEAR
 
SLAC 2008 RPMs selber bauen
SLAC 2008 RPMs selber bauenSLAC 2008 RPMs selber bauen
SLAC 2008 RPMs selber bauen
 
TYPO3 Usergroup Dresden - TYPO3 & Composer
TYPO3 Usergroup Dresden - TYPO3 & ComposerTYPO3 Usergroup Dresden - TYPO3 & Composer
TYPO3 Usergroup Dresden - TYPO3 & Composer
 
Automatischer Build mit Maven
Automatischer Build mit MavenAutomatischer Build mit Maven
Automatischer Build mit Maven
 
Einführung in Docker
Einführung in DockerEinführung in Docker
Einführung in Docker
 
Grundlagen puppet
Grundlagen puppetGrundlagen puppet
Grundlagen puppet
 
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan ScheidtAutomatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
 
JAX 2024: Go in der Praxis einsetzen
JAX 2024: Go in der Praxis einsetzenJAX 2024: Go in der Praxis einsetzen
JAX 2024: Go in der Praxis einsetzen
 
Html5 workshop Peter Voringer
Html5 workshop   Peter VoringerHtml5 workshop   Peter Voringer
Html5 workshop Peter Voringer
 
Präsentation plug in development
Präsentation plug in developmentPräsentation plug in development
Präsentation plug in development
 
Einfuehrung in die Erstellung von Software-Paketen mit dem RPM Package Manager
Einfuehrung in die Erstellung von Software-Paketen mit dem RPM Package ManagerEinfuehrung in die Erstellung von Software-Paketen mit dem RPM Package Manager
Einfuehrung in die Erstellung von Software-Paketen mit dem RPM Package Manager
 
Entwicklungsumgebungen - Packer, Vagrant, Puppet
Entwicklungsumgebungen - Packer, Vagrant, PuppetEntwicklungsumgebungen - Packer, Vagrant, Puppet
Entwicklungsumgebungen - Packer, Vagrant, Puppet
 
Gearman - Distributed Job System
Gearman - Distributed Job SystemGearman - Distributed Job System
Gearman - Distributed Job System
 
JS Best Practises Debugging und Logging
JS Best Practises Debugging und LoggingJS Best Practises Debugging und Logging
JS Best Practises Debugging und Logging
 
Oracle oem 12c_plugin_development-doag-konferenz_11_2014_print_gunther_pipperr
Oracle oem 12c_plugin_development-doag-konferenz_11_2014_print_gunther_pipperrOracle oem 12c_plugin_development-doag-konferenz_11_2014_print_gunther_pipperr
Oracle oem 12c_plugin_development-doag-konferenz_11_2014_print_gunther_pipperr
 

Mehr von Mayflower GmbH

Plugging holes — javascript memory leak debugging
Plugging holes — javascript memory leak debuggingPlugging holes — javascript memory leak debugging
Plugging holes — javascript memory leak debugging
Mayflower GmbH
 

Mehr von Mayflower GmbH (20)

Mit Maintenance umgehen können- Fixt du noch Bugs oder lieferst du schon neue...
Mit Maintenance umgehen können- Fixt du noch Bugs oder lieferst du schon neue...Mit Maintenance umgehen können- Fixt du noch Bugs oder lieferst du schon neue...
Mit Maintenance umgehen können- Fixt du noch Bugs oder lieferst du schon neue...
 
Why and what is go
Why and what is goWhy and what is go
Why and what is go
 
Agile Anti-Patterns
Agile Anti-PatternsAgile Anti-Patterns
Agile Anti-Patterns
 
JavaScript Days 2015: Security
JavaScript Days 2015: SecurityJavaScript Days 2015: Security
JavaScript Days 2015: Security
 
Vom Entwickler zur Führungskraft
Vom Entwickler zur FührungskraftVom Entwickler zur Führungskraft
Vom Entwickler zur Führungskraft
 
Produktive teams
Produktive teamsProduktive teams
Produktive teams
 
Salt and pepper — native code in the browser Browser using Google native Client
Salt and pepper — native code in the browser Browser using Google native ClientSalt and pepper — native code in the browser Browser using Google native Client
Salt and pepper — native code in the browser Browser using Google native Client
 
Plugging holes — javascript memory leak debugging
Plugging holes — javascript memory leak debuggingPlugging holes — javascript memory leak debugging
Plugging holes — javascript memory leak debugging
 
Usability im web
Usability im webUsability im web
Usability im web
 
Rewrites überleben
Rewrites überlebenRewrites überleben
Rewrites überleben
 
JavaScript Security
JavaScript SecurityJavaScript Security
JavaScript Security
 
50 mal produktiver - oder warum ich gute Teams brauche und nicht gute Entwick...
50 mal produktiver - oder warum ich gute Teams brauche und nicht gute Entwick...50 mal produktiver - oder warum ich gute Teams brauche und nicht gute Entwick...
50 mal produktiver - oder warum ich gute Teams brauche und nicht gute Entwick...
 
Responsive Webdesign
Responsive WebdesignResponsive Webdesign
Responsive Webdesign
 
Native Cross-Platform-Apps mit Titanium Mobile und Alloy
Native Cross-Platform-Apps mit Titanium Mobile und AlloyNative Cross-Platform-Apps mit Titanium Mobile und Alloy
Native Cross-Platform-Apps mit Titanium Mobile und Alloy
 
Pair Programming Mythbusters
Pair Programming MythbustersPair Programming Mythbusters
Pair Programming Mythbusters
 
Shoeism - Frau im Glück
Shoeism - Frau im GlückShoeism - Frau im Glück
Shoeism - Frau im Glück
 
Bessere Software schneller liefern
Bessere Software schneller liefernBessere Software schneller liefern
Bessere Software schneller liefern
 
Von 0 auf 100 in 2 Sprints
Von 0 auf 100 in 2 SprintsVon 0 auf 100 in 2 Sprints
Von 0 auf 100 in 2 Sprints
 
Piwik anpassen und skalieren
Piwik anpassen und skalierenPiwik anpassen und skalieren
Piwik anpassen und skalieren
 
Agilitaet im E-Commerce - E-Commerce Breakfast
Agilitaet im E-Commerce - E-Commerce BreakfastAgilitaet im E-Commerce - E-Commerce Breakfast
Agilitaet im E-Commerce - E-Commerce Breakfast
 

PHP Dependency und Paket Management mit Composer

  • 1. P Dependency und P HP aket Management mit Composer Dominik Liebler I 22. März 2012 © Mayflower GmbH 2012
  • 2. Dependency Management, warum eigentlich? I Abhängigkeiten Framework (ZF Symfony2, ...) , OR M AP Clients I I Code Reusability Rauslösen von wiederverwendbarem Code viele kleine Libraries statt Framework Monolithen DR und Don't reinvent the wheel! Y Mayflower GmbH I 2
  • 3. Warum nicht PEAR verwenden? I globale Installation von Paketen I schwierige Kontrolle der Paketversionen im Projekt I QA Prozess bei pear.php.net Coding Standards RFCs I Aufsetzen eines PEARChannels zeitaufwändig und nicht einfach genug Mayflower GmbH I 3
  • 4. Composer! Mayflower GmbH I 4
  • 5. Warum Composer? I lokale Installation von Paketen I Config im Repository gleiche Versionen bei jedem Developer Dependencies an zentraler Stelle dokumentiert I direkter Zugriff auf git, svn, tar.gz files I zentrales Repository/ Channel nicht zwingend benötigt Mayflower GmbH I 5
  • 6. 2 Teile I Composer IPackagist Dependency Manager Default Paketrepository http:/ / getcomposer.org http:/ / packagist.org Mayflower GmbH I 6
  • 7. History I Start: ~April 2011 I Einflüsse: npm (node.js) und bundler (Ruby) I Wurzeln in der Symfony2 Community wird seit Anfang 2012 für Symfony2 verwendet I > 400 Pakete auf packagist.org I Github Service Hook für Packagist Mayflower GmbH I 7
  • 8. Composer Architektur I einzelnes PHARPaket I simple JSON Configs I bedient externe Tools für VCS I kann git, svn, hg, zip, tar.gz, etc. I benutzt AP von Github, Bitbucket Is Mayflower GmbH I 8
  • 10. Paketkonfigurationen Mayflower GmbH I 10
  • 11. Beispiel: Paket von Packagist (composer.json) { "require": { "doctrine/couchdb": "*" } } Mayflower GmbH I 11
  • 12. Pakete installlieren php composer.phar install Mayflower GmbH I 12
  • 13. Beispiel: Paket von Github { "repositories": [ { "type": "vcs", "url": "https://github.com/nrk/predis" } ], "require": { "predis/predis": "v0.7.0" } } Mayflower GmbH I 13
  • 14. Pakete updaten php composer.phar update Mayflower GmbH I 14
  • 15. Beispiel: Paket von PEAR { "repositories": [ { "type": "pear", "url": "http://pear2.php.net" } ], "require": { "pear-pear2/PEAR2_HTTP_Request": "*" } } Mayflower GmbH I 15
  • 16. Beispiel: Paket von Subversion { "repositories": [{ "type": "package", "package": { "name": "zend/framework", "version": "1.11.11", "source": { "url": "http://framework.zend.com/svn/framework/standard", "type": "svn", "reference": "tags/release-1.11.11/" } } }], "require": { "zend/framework": "1.11.*" } } Mayflower GmbH I 16
  • 17. Beispiel: ZIP Datei { "repositories": [{ "type": "package", "package": { "name": "smarty/smarty", "version": "3.1.7", "dist": { "url": "http://www.smarty.net/files/Smarty-3.1.7.zip", "type": "zip" } } }], "require": { "smarty/smarty": "3.1.*" } } Mayflower GmbH I 17
  • 18. Autoloading: PSR-0 I P -0 Standard SR Klasse F Bar in Datei / project/ F Bar.php oo oo/ I Classloader wird generiert vendor/.composer/autoload.php vendor/.composer/autoload_namespaces.php I Einbinden: require 'vendor/.composer/autoload.php'; Mayflower GmbH I 18
  • 19. Wiederverwendbarer Code? =eigenes Package! Mayflower GmbH I 19
  • 20. Beispiel: UUID library { "name": "domnikl/uuid", "type": "library", "description": "UUID generator class for PHP", "keywords": ["uuid"], "homepage": "http://www.mayflower.de", "license": "MIT", "authors": [ {"name": "Dominik Liebler", "email": "dominik.liebler@mayflower.de"} ], "require": { "php": ">=5.3.0" }, "autoload": { "psr-0": { "MayflowerUuid": "lib/" } } } Mayflower GmbH I 20
  • 21. eigene Repositories Mayflower GmbH I 21
  • 22. Satis I Symfony2 Console Anwendung I lightweight I erzeugt Static Repositories I lagert Paketquellen aus (packages.json) I für kleine Projekte geeignet I https:/ / github.com/ composer/ satis Mayflower GmbH I 22
  • 23. Packagist I Symfony2 und Doctrine2 Webanwendung I MySQL, PostgreSQL, SQLite, etc. I crawlt Pakete selbstständig I Sources: git, svn, hg I Suche nach Paketen I https:/ / github.com/ composer/ packagist Mayflower GmbH I 23
  • 24. Packagist Mayflower GmbH I 24
  • 25. Vielen Dank für Ihre Aufmerksamkeit! Referent Dominik Liebler dominik.liebler@mayflower.de +49 931 35965 1180 Mayflower GmbH Gneisenaustraße 10/ 11 97074 Würzburg @domnikl 29.03.12 Mayflower GmbH 25