PHP Dependency und Paket Management mit Composer

Preview:

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": "dominik.liebler@mayflower.de"} ], "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 Lieblerdominik.liebler@mayflower.de+49 931 35965 1180Mayflower GmbHGneisenaustraße 10/ 1197074 Würzburg@domnikl

Recommended