Date post: | 15-Jul-2015 |
Category: |
Technology |
Upload: | jordi-boggiano |
View: | 4,445 times |
Download: | 0 times |
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
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
The Composer EcosystemSatis - Micro Repository
MinimalisticUseful for closed code
Jordi Boggiano Company nelm.ioTwitter @seldaek Blog seld.be
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
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
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
Questions?
@seldaek
slides.seld.be
Feedback:
http://joind.in/6051
Jordi Boggiano Company nelm.ioTwitter @seldaek Blog seld.be