25
© Mayflower GmbH 2012 PHPDependency und Paket Management mit Composer Dominik Liebler I 22. März 2012

PHP Dependency und Paket Management mit Composer

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

Page 1: PHP Dependency und Paket Management mit Composer

© Mayflower GmbH 2012

PHP Dependency und Paket Management mit Composer

Dominik Liebler I 22. März 2012

Page 2: PHP Dependency und Paket Management mit Composer

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!

Page 3: PHP Dependency und Paket Management mit Composer

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

Page 4: PHP Dependency und Paket Management mit Composer

Mayflower GmbH I 4

Composer!

Page 5: PHP Dependency und Paket Management mit 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

Page 6: PHP Dependency und Paket Management mit Composer

Mayflower GmbH I 6

2 Teile

I Composer

Dependency Manager

http:/ / getcomposer.org

I Packagist

Default Paketrepository

http:/ / packagist.org

Page 7: PHP Dependency und Paket Management mit Composer

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

Page 8: PHP Dependency und Paket Management mit Composer

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

Page 9: PHP Dependency und Paket Management mit Composer

Mayflower GmbH I 9

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

Installation

Page 10: PHP Dependency und Paket Management mit Composer

Mayflower GmbH I 10

Paketkonfigurationen

Page 11: PHP Dependency und Paket Management mit Composer

Mayflower GmbH I 11

Beispiel: Paket von Packagist (composer.json)

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

Page 12: PHP Dependency und Paket Management mit Composer

Mayflower GmbH I 12

php composer.phar install

Pakete installlieren

Page 13: PHP Dependency und Paket Management mit Composer

Mayflower GmbH I 13

Beispiel: Paket von Github

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

Page 14: PHP Dependency und Paket Management mit Composer

Mayflower GmbH I 14

php composer.phar update

Pakete updaten

Page 15: PHP Dependency und Paket Management mit Composer

Mayflower GmbH I 15

Beispiel: Paket von PEAR

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

Page 16: PHP Dependency und Paket Management mit Composer

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

Page 17: PHP Dependency und Paket Management mit Composer

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

Page 18: PHP Dependency und Paket Management mit Composer

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';

Page 19: PHP Dependency und Paket Management mit Composer

Mayflower GmbH I 19

= eigenes Package!

Wiederverwendbarer Code?

Page 20: PHP Dependency und Paket Management mit Composer

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

Page 21: PHP Dependency und Paket Management mit Composer

Mayflower GmbH I 21

eigene Repositories

Page 22: PHP Dependency und Paket Management mit Composer

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

Page 23: PHP Dependency und Paket Management mit Composer

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

Page 24: PHP Dependency und Paket Management mit Composer

Mayflower GmbH I 24

Packagist

Page 25: PHP Dependency und Paket Management mit Composer

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