Transcript
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


Recommended