Upload
mayflower-gmbh
View
3.123
Download
3
Embed Size (px)
DESCRIPTION
Vortragsfolien von Dominik LieblerJedes moderne PHP Projekt hat Abhängigkeiten zu Drittsoftware, sei es das MVC Framework, ORMs oder auch Client-APIs für verschiedene Dienste. Composer hilft dabei den Überblick zu bewahren und dem Versionschaos zu entgehen. Im ersten Teil des Vortrags wird es darum gehen, bestehende Packages in ein Projekt einzubinden und selbst eigene Packages zu erstellen. Der zweite Teil wird beleuchten, wie man selbst ein Repository mit Hilfe von Satis oder Packagist für die eigenen Pakete einrichtet und verwaltet.
Citation preview
© Mayflower GmbH 2012
PHP Dependency und Paket Management mit Composer
Dominik Liebler I 22. März 2012
Mayflower GmbH I 2
Dependency Management, warum eigentlich?
I AbhängigkeitenFramework (ZF, Symfony2, ...)ORMAPI Clients
I Code ReusabilityRauslösen von wiederverwendbarem Codeviele kleine Libraries statt Framework MonolithenDRY und Don't reinvent the wheel!
Mayflower GmbH I 3
Warum nicht PEAR verwenden?
I globale Installation von Paketen
I schwierige Kontrolle der Paketversionen im Projekt
I QA Prozess bei pear.php.netCoding StandardsRFCs
I Aufsetzen eines PEAR Channels zeitaufwändig und nicht einfach genug
Mayflower GmbH I 4
Composer!
Mayflower GmbH I 5
Warum Composer?
I lokale Installation von Paketen
I Config im Repositorygleiche Versionen bei jedem DeveloperDependencies an zentraler Stelle dokumentiert
I direkter Zugriff auf git, svn, tar.gz files
I zentrales Repository/ Channel nicht zwingend benötigt
Mayflower GmbH I 6
2 Teile
I Composer
Dependency Manager
http:/ / getcomposer.org
I Packagist
Default Paketrepository
http:/ / packagist.org
Mayflower GmbH I 7
History
I Start: ~April 2011
I Einflüsse: npm (node.js) und bundler (Ruby)
I Wurzeln in der Symfony2 Communitywird seit Anfang 2012 für Symfony2 verwendet
I > 400 Pakete auf packagist.org
I Github Service Hook für Packagist
Mayflower GmbH I 8
Composer Architektur
I einzelnes PHAR Paket
I simple JSON Configs
I bedient externe Tools für VCS
I kann git, svn, hg, zip, tar.gz, etc.
I benutzt APIs von Github, Bitbucket
Mayflower GmbH I 9
curl -s http://getcomposer.org/installer | php
Installation
Mayflower GmbH I 10
Paketkonfigurationen
Mayflower GmbH I 11
Beispiel: Paket von Packagist (composer.json)
{"require": {"doctrine/couchdb": "*"}}
Mayflower GmbH I 12
php composer.phar install
Pakete installlieren
Mayflower GmbH I 13
Beispiel: Paket von Github
{ "repositories": [ { "type": "vcs", "url": "https://github.com/nrk/predis" } ], "require": { "predis/predis": "v0.7.0" }}
Mayflower GmbH I 14
php composer.phar update
Pakete updaten
Mayflower GmbH I 15
Beispiel: Paket von PEAR
{ "repositories": [ { "type": "pear", "url": "http://pear2.php.net" } ], "require": { "pear-pear2/PEAR2_HTTP_Request": "*" }}
Mayflower GmbH I 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 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 18
Autoloading: PSR-0
I PSR-0 StandardKlasse \ Foo\ Bar in Datei / project/ Foo/ Bar.php
I Classloader wird generiertvendor/.composer/autoload.phpvendor/.composer/autoload_namespaces.php
I Einbinden:require 'vendor/.composer/autoload.php';
Mayflower GmbH I 19
= eigenes Package!
Wiederverwendbarer Code?
Mayflower GmbH I 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": "[email protected]"} ], "require": { "php": ">=5.3.0" }, "autoload": { "psr-0": { "Mayflower\\Uuid": "lib/" } }}
Mayflower GmbH I 21
eigene Repositories
Mayflower GmbH I 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 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 24
Packagist
29.03.12 Mayflower GmbH 25
Vielen Dank für Ihre Aufmerksamkeit!
Referent Dominik [email protected]+49 931 35965 1180Mayflower GmbHGneisenaustraße 10/ 1197074 Würzburg@domnikl