+ All Categories
Home > Technology > Dependency Management with Composer

Dependency Management with Composer

Date post: 15-Jul-2015
Category:
Upload: jordi-boggiano
View: 4,445 times
Download: 0 times
Share this document with a friend
Popular Tags:
31
Jordi Boggiano @seldaek http://nelm.io/ Dependency Management with Composer
Transcript

Jordi Boggiano@seldaekhttp://nelm.io/

Dependency Managementwith Composer

About Me

Belgian living in Zürich, Switzerland

Building the internet for 10 years http://seld.be

Symfony2, Composer and other OSS contributions http://github.com/Seldaek

Working at Nelmio http://nelm.io Symfony2 & frontend performance consulting

Jordi Boggiano Company nelm.ioTwitter @seldaek Blog seld.be

Jordi Boggiano Company nelm.ioTwitter @seldaek Blog seld.be

Managing Packages vs Dependencies

Jordi Boggiano Company nelm.ioTwitter @seldaek Blog seld.be

Package Management in PHP

Jordi Boggiano Company nelm.ioTwitter @seldaek Blog seld.be

The Composer Ecosystemgithub.com/composer

Jordi Boggiano Company nelm.ioTwitter @seldaek Blog seld.be

The Composer EcosystemComposer - CLI Tool

Easy to useInstalls deps per-projectFlexible and embeddable

Jordi Boggiano Company nelm.ioTwitter @seldaek Blog seld.be

The Composer EcosystemPackagist - Package Repository

Aggregates PHP librariesOpen to all OSS projectsFeeds on VCS repositories

Jordi Boggiano Company nelm.ioTwitter @seldaek Blog seld.be

Early adopters are loving it

Jordi Boggiano Company nelm.ioTwitter @seldaek Blog seld.be

The Composer EcosystemSatis - Micro Repository

MinimalisticUseful for closed code

Jordi Boggiano Company nelm.ioTwitter @seldaek Blog seld.be

Usage InstructionsUsage Instructions

Using a Composed Project

Cloning into trashbin...

All settings correct for using ComposerComposer successfully installed to: /home/bob/trashbin/composer.pharUse it: php composer.phar

git clone https://github.com/igorw/trashbin

cd trashbin/

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

Jordi Boggiano Company nelm.ioTwitter @seldaek Blog seld.be

Using a Composed Project

Installing from lock file - Package symfony/class-loader (2.1.0-dev) Downloading Unpacking archive Cleaning up[...] - Package predis/predis (dev-master) Downloading Unpacking archive Cleaning up - Package twig/twig (1.6.0) Downloading Unpacking archive Cleaning upGenerating autoload files

php composer.phar install

Jordi Boggiano Company nelm.ioTwitter @seldaek Blog seld.be

Using a Composed Project01 vendor/02 .composer/03 bin/04 pimple/05 pimple/06 predis/07 predis/08 service-provider/09 silex/10 silex/11 symfony/12 browser-kit/13 class-loader/14 css-selector/15 dom-crawler/16 event-dispatcher/17 finder/18 http-foundation/19 http-kernel/20 routing/21 twig/22 twig/

Jordi Boggiano Company nelm.ioTwitter @seldaek Blog seld.be

Downloading Project Dependencies

composer.jsonLocated in project root directoryDefines dependencies

Source install: With install --prefer-source it clones/checks out the code.

1 {2 "require": {3 "silex/silex": ">=1.0.0-dev",4 "symfony/finder": "2.1-dev",5 "twig/twig": "1.*",6 "predis/service-provider": "dev-master"7 }8 }

Jordi Boggiano Company nelm.ioTwitter @seldaek Blog seld.be

Creating a Package Definition

Note: Package Definition === Application/Root Package

01 {02 "name": "predis/predis",03 "type": "library",04 "description": "Flexible and feature-complete Redis client",05 "keywords": ["nosql", "redis", "predis"],06 "homepage": "http://github.com/nrk/predis",07 "license": "MIT",08 "version": "0.7.1"09 "authors": [10 {11 "name": "Daniele Alessandri",12 "email": "[email protected]",13 "homepage": "http://clorophilla.net"14 }15 ],16 "require": {17 "php": ">=5.3.0"18 },19 "autoload": {20 "psr-0": {"Predis": "lib/"}21 }22 }

Jordi Boggiano Company nelm.ioTwitter @seldaek Blog seld.be

Avoiding version chaosin your team

composer.lockLists packages & versionsReplaces composer.jsonCreated by composer install (installs your dependencies)Updated by composer update (updates your dependencies)Must be committed in your VCS and shipped with your releases

BenefitsEveryone on a team works with exactly the same dependency versionsWhen deploying, all machines run exactly the same dependency versionsUsers will never get dependency versions that you did not test with

Jordi Boggiano Company nelm.ioTwitter @seldaek Blog seld.be

AutoloadingLibraries/projects define their namespaces:

Composer builds an autoloader for you:

Trashbin uses the generated autoloader:

1 "autoload": {2 "psr-0": {"Predis": "lib/"}3 }

1 vendor/.composer/2 autoload_namespaces.php3 autoload.php4 ClassLoader.php5 installed.json

1 require_once __DIR__.'/../vendor/.composer/autoload.php';2 3 use Silex\Application;4 use Silex\Extension\TwigExtension;5 6 use Symfony\Component\Finder\Finder;7 use Symfony\Component\HttpFoundation\Response;8 9 $app = new Application();

Jordi Boggiano Company nelm.ioTwitter @seldaek Blog seld.be

Autoloading TestsAdd your own namespaces for testing purposes in PHPUnit's bootstrap:

1 # tests/bootstrap.php2 3 $loader = require_once __DIR__.'/../vendor/.composer/autoload.php';4 5 $loader->add('My\Test', __DIR__);

Jordi Boggiano Company nelm.ioTwitter @seldaek Blog seld.be

Alternative Repositories

Composer Repository Implementations ($url/packages.json)

PackagistSatis(Pirum)

01 "repositories": [02 {03 "type": "composer",04 "url": "http://example.org"05 },06 {07 "type": "vcs",08 "url": "git://example.org/MyRepo.git"09 },10 {11 "type": "pear",12 "url": "http://pear.example.org"13 },14 {15 "packagist": false16 }17 ]

Jordi Boggiano Company nelm.ioTwitter @seldaek Blog seld.be

Depending on packages without composer.json

Note: repositories are only available to the root package

01 "repositories": [02 {03 "type": "package",04 "package": {05 "name": "vendor/package",06 "version": "1.0.0",07 "dist": {08 "url": "http://example.org/package.zip",09 "type": "zip"10 },11 "source": {12 "url": "git://example.org/package.git",13 "type": "git",14 "reference": "tag name, branch name or commit hash"15 }16 }17 }18 ],19 "require": {20 "vendor/package": "1.0.0"21 }

Jordi Boggiano Company nelm.ioTwitter @seldaek Blog seld.be

State of the Project

Jordi Boggiano Company nelm.ioTwitter @seldaek Blog seld.be

Adoption>500 packages on Packagist (+150 inFeb.)Alpha1 just releasedMany early adoptersSupported by frameworks/libsChef recipes http://goo.gl/1QMKp(Integration in apps for plugins)(Integration by PaaS providers)

Jordi Boggiano Company nelm.ioTwitter @seldaek Blog seld.be

Missing FeaturesHuman readable error reportingUser-friendliness on expected failuresBetter support for beta/alpha/.. releasesMany more little things: github.com/composer/composer/issues

Jordi Boggiano Company nelm.ioTwitter @seldaek Blog seld.be

Wishful ThinkingWishful Thinking

Look around.

Write small libs.

Share code.

Reuse things.

Reinvigorate PHP

Jordi Boggiano Company nelm.ioTwitter @seldaek Blog seld.be

Find Out MoreGetComposer.orgPackagist.orggithub.com/composercomposer-dev google group#composer & #composer-dev

Jordi Boggiano Company nelm.ioTwitter @seldaek Blog seld.be

Thank you.

Jordi Boggiano Company nelm.ioTwitter @seldaek Blog seld.be

Questions?

[email protected]

@seldaek

slides.seld.be

Feedback:

http://joind.in/6051

Jordi Boggiano Company nelm.ioTwitter @seldaek Blog seld.be


Recommended