Shifting gears with Composer

148
Shifting gears with Composer Javier Lopez (@loalf)

Transcript of Shifting gears with Composer

Page 1: Shifting gears with Composer

Shifting gears with Composer

Javier Lopez (@loalf)

Page 2: Shifting gears with Composer

Who am I?

Page 3: Shifting gears with Composer

Who am I?

• I am from Spain

Page 4: Shifting gears with Composer

Who am I?

• I am from Spain• I live in London

Page 5: Shifting gears with Composer

Who am I?

• I am from Spain• I live in London• I work for IPC Media

Page 6: Shifting gears with Composer

Who am I?

• I am from Spain• I live in London• I work for IPC Media• I tweet as @loalf

Page 7: Shifting gears with Composer

Who am I?

• I am from Spain• I live in London• I work for IPC Media• I tweet as @loalf• I co-organize DeSymfony (www.desymfony.com)

Page 8: Shifting gears with Composer

Who am I?

• I am from Spain• I live in London• I work for IPC Media• I tweet as @loalf• I co-organize DeSymfony (www.desymfony.com)

Still want to know more?http://www.linkedin.com/in/loalf

Page 9: Shifting gears with Composer

http://www.flickr.com/photos/jayshep5/5792259218/

Shifting gears

Page 10: Shifting gears with Composer

My App

Page 11: Shifting gears with Composer

My App

Page 12: Shifting gears with Composer

My App

Page 13: Shifting gears with Composer

My App

Page 14: Shifting gears with Composer

My App

Page 15: Shifting gears with Composer

Composer is a tool for dependency management in PHP. It allows you to declare the dependent libraries your project needs and it will

install them in your project for you.

Page 16: Shifting gears with Composer
Page 17: Shifting gears with Composer

Is it a new concept?

Page 18: Shifting gears with Composer

Is it a new concept? Nope.

Page 19: Shifting gears with Composer

Is it a new concept?

Node Package Manager

Nope.

Page 20: Shifting gears with Composer

Is it a new concept?

Node Package Manager

Ruby Package Manager

Nope.

Page 21: Shifting gears with Composer
Page 22: Shifting gears with Composer

But, what about PEAR?

Page 23: Shifting gears with Composer

But, what about PEAR?

• You have to install it in all the system

Page 24: Shifting gears with Composer

But, what about PEAR?

• You have to install it in all the system

• You can´t see the source code

Page 25: Shifting gears with Composer

But, what about PEAR?

• You have to install it in all the system

• You can´t see the source code

• Don´t allow different repository sources

Page 26: Shifting gears with Composer

But, what about PEAR?

• You have to install it in all the system

• You can´t see the source code

• Don´t allow different repository sources

• Composer is compatible with PEAR, :)

Page 27: Shifting gears with Composer
Page 28: Shifting gears with Composer

Installing Composer (locally)

Page 29: Shifting gears with Composer

Installing Composer (locally)

mkdir myprojectname

Page 30: Shifting gears with Composer

Installing Composer (locally)

mkdir myprojectname

cd myprojectname

Page 31: Shifting gears with Composer

Installing Composer (locally)

mkdir myprojectname

cd myprojectname

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

Page 32: Shifting gears with Composer

Installing Composer (locally)

mkdir myprojectname

cd myprojectname

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

Done!

Page 33: Shifting gears with Composer

// composer.json{ "require" : { "monolog/monolog" : "1.0.*", "symfony/translation" : "2.1.0-RC1", "behat/behat" : ">2.3.5,<2.4", "fabpot/goutte" : "dev-master" }, "minimum-stability": "dev"}

Page 34: Shifting gears with Composer

// composer.json{ "require" : { "monolog/monolog" : "1.0.*", "symfony/translation" : "2.1.0-RC1", "behat/behat" : ">2.3.5,<2.4", "fabpot/goutte" : "dev-master" }, "minimum-stability": "dev"}

Page 35: Shifting gears with Composer

// composer.json{ "require" : { "monolog/monolog" : "1.0.*", "symfony/translation" : "2.1.0-RC1", "behat/behat" : ">2.3.5,<2.4", "fabpot/goutte" : "dev-master" }, "minimum-stability": "dev"}

Page 36: Shifting gears with Composer

// composer.json{ "require" : { "monolog/monolog" : "1.0.*", "symfony/translation" : "2.1.0-RC1", "behat/behat" : ">2.3.5,<2.4", "fabpot/goutte" : "dev-master" }, "minimum-stability": "dev"}

Page 37: Shifting gears with Composer

// composer.json{ "require" : { "monolog/monolog" : "1.0.*", "symfony/translation" : "2.1.0-RC1", "behat/behat" : ">2.3.5,<2.4", "fabpot/goutte" : "dev-master" }, "minimum-stability": "dev"}

Page 38: Shifting gears with Composer

// composer.json{ "require" : { "monolog/monolog" : "1.0.*", "symfony/translation" : "2.1.0-RC1", "behat/behat" : ">2.3.5,<2.4", "fabpot/goutte" : "dev-master" }, "minimum-stability": "dev"}

Page 39: Shifting gears with Composer

// composer.json{ "require" : { "monolog/monolog" : "1.0.*", "symfony/translation" : "2.1.0-RC1", "behat/behat" : ">2.3.5,<2.4", "fabpot/goutte" : "dev-master" }, "minimum-stability": "dev"}

Page 40: Shifting gears with Composer

// composer.json{ "require" : { "monolog/monolog" : "1.0.*", "symfony/translation" : "2.1.0-RC1", "behat/behat" : ">2.3.5,<2.4", "fabpot/goutte" : "dev-master" }, "minimum-stability": "dev"}

Page 41: Shifting gears with Composer

// composer.json{ "require" : { "monolog/monolog" : "1.0.*", "symfony/translation" : "2.1.0-RC1", "behat/behat" : ">2.3.5,<2.4", "fabpot/goutte" : "dev-master" }, "minimum-stability": "dev"}

Page 42: Shifting gears with Composer

// composer.json{ "require" : { "monolog/monolog" : "1.0.*", "symfony/translation" : "2.1.0-RC1", "behat/behat" : ">2.3.5,<2.4", "fabpot/goutte" : "dev-master" }, "minimum-stability": "dev"}

Page 43: Shifting gears with Composer

// composer.json{ "require" : { "monolog/monolog" : "1.0.*", "symfony/translation" : "2.1.0-RC1", "behat/behat" : ">2.3.5,<2.4", "fabpot/goutte" : "dev-master" }, "minimum-stability": "dev"}

Page 44: Shifting gears with Composer

// composer.json{ "require" : { "monolog/monolog" : "1.0.*", "symfony/translation" : "2.1.0-RC1", "behat/behat" : ">2.3.5,<2.4", "fabpot/goutte" : "dev-master" }, "minimum-stability": "dev"}

Page 45: Shifting gears with Composer

// composer.json{ "require" : { "monolog/monolog" : "1.0.*", "symfony/translation" : "2.1.0-RC1", "behat/behat" : ">2.3.5,<2.4", "fabpot/goutte" : "dev-master" }, "minimum-stability": "dev"}

Page 46: Shifting gears with Composer

// composer.json{ "require" : { "monolog/monolog" : "1.0.*", "symfony/translation" : "2.1.0-RC1", "behat/behat" : ">2.3.5,<2.4", "fabpot/goutte" : "dev-master" }, "minimum-stability": "dev"}

Page 47: Shifting gears with Composer

// composer.json{ "require" : { "monolog/monolog" : "1.0.*", "symfony/translation" : "2.1.0-RC1", "behat/behat" : ">2.3.5,<2.4", "fabpot/goutte" : "dev-master" }, "minimum-stability": "dev"}

Page 48: Shifting gears with Composer

// composer.json{ "require" : { "monolog/monolog" : "1.0.*", "symfony/translation" : "2.1.0-RC1", "behat/behat" : ">2.3.5,<2.4", "fabpot/goutte" : "dev-master" }, "minimum-stability": "dev"}

Page 49: Shifting gears with Composer

// composer.json{ "require" : { "monolog/monolog" : "1.0.*", "symfony/translation" : "2.1.0-RC1", "behat/behat" : ">2.3.5,<2.4", "fabpot/goutte" : "dev-master" }, "minimum-stability": "dev"}

Page 50: Shifting gears with Composer

php composer.phar install

Page 51: Shifting gears with Composer

Installing dependencies

- Installing guzzle/parser (v2.8.4)

Downloading: 100%

- Installing symfony/event-dispatcher (dev-master)

Cloning v2.1.0-BETA4

- Installing guzzle/common (v2.8.4)

Downloading: 100%

- Installing guzzle/http (v2.8.4)

Downloading: 100%

- Installing symfony/process (dev-master)

Cloning v2.1.0-RC1

- Installing symfony/finder (dev-master)

Cloning 1af11ab3a686f9c45f2a8d9d721d5717cdd5f1d6

Page 52: Shifting gears with Composer

!"" composer.json

!"" composer.lock

#"" vendor

!"" autoload.php

!"" behat

!"" bin

!"" composer

!"" fabpot

!"" guzzle

!"" monolog

#"" symfony

Page 53: Shifting gears with Composer

!"" composer.json

!"" composer.lock

#"" vendor

!"" autoload.php

!"" behat

!"" bin

!"" composer

!"" fabpot

!"" guzzle

!"" monolog

#"" symfony

Page 54: Shifting gears with Composer

!"" composer.json

!"" composer.lock

#"" vendor

!"" autoload.php

!"" behat

!"" bin

!"" composer

!"" fabpot

!"" guzzle

!"" monolog

#"" symfony

Page 55: Shifting gears with Composer

!"" composer.json

!"" composer.lock

#"" vendor

!"" autoload.php

!"" behat

!"" bin

!"" composer

!"" fabpot

!"" guzzle

!"" monolog

#"" symfony

Page 56: Shifting gears with Composer

!"" composer.json

!"" composer.lock

#"" vendor

!"" autoload.php

!"" behat

!"" bin

!"" composer

!"" fabpot

!"" guzzle

!"" monolog

#"" symfony

Page 57: Shifting gears with Composer

!"" composer.json

!"" composer.lock

#"" vendor

!"" autoload.php

!"" behat

!"" bin

!"" composer

!"" fabpot

!"" guzzle

!"" monolog

#"" symfony

Page 58: Shifting gears with Composer

!"" composer.json

!"" composer.lock

#"" vendor

!"" autoload.php

!"" behat

!"" bin

!"" composer

!"" fabpot

!"" guzzle

!"" monolog

#"" symfony

Page 59: Shifting gears with Composer

!"" composer.json

!"" composer.lock

#"" vendor

!"" autoload.php

!"" behat

!"" bin

!"" composer

!"" fabpot

!"" guzzle

!"" monolog

#"" symfony

Page 60: Shifting gears with Composer

!"" composer.json

!"" composer.lock

#"" vendor

!"" autoload.php

!"" behat

!"" bin

!"" composer

!"" fabpot

!"" guzzle

!"" monolog

#"" symfony

Page 61: Shifting gears with Composer

!"" composer.json

!"" composer.lock

#"" vendor

!"" autoload.php

!"" behat

!"" bin

!"" composer

!"" fabpot

!"" guzzle

!"" monolog

#"" symfony

Page 62: Shifting gears with Composer

!"" composer.json

!"" composer.lock

#"" vendor

!"" autoload.php

!"" behat

!"" bin

!"" composer

!"" fabpot

!"" guzzle

!"" monolog

#"" symfony

Page 63: Shifting gears with Composer

!"" composer.json

!"" composer.lock

#"" vendor

!"" autoload.php

!"" behat

!"" bin

!"" composer

!"" fabpot

!"" guzzle

!"" monolog

#"" symfony

Page 64: Shifting gears with Composer

!"" composer.json

!"" composer.lock

#"" vendor

!"" autoload.php

!"" behat

!"" bin

!"" composer

!"" fabpot

!"" guzzle

!"" monolog

#"" symfony

Page 65: Shifting gears with Composer

http://www.flickr.com/photos/jayshep5/5792259218/

http://www.packagist.org

Page 68: Shifting gears with Composer

// composer.josn{ "name": "monolog/monolog", "require": { "php": ">=5.3.0" },}

Page 69: Shifting gears with Composer

// composer.josn{ "name": "monolog/monolog", "require": { "php": ">=5.3.0" },}

Page 70: Shifting gears with Composer

// composer.josn{ "name": "monolog/monolog", "require": { "php": ">=5.3.0" },}

Page 71: Shifting gears with Composer

// composer.josn{ "name": "monolog/monolog", "require": { "php": ">=5.3.0" },}

Page 72: Shifting gears with Composer

// composer.josn{ "name": "monolog/monolog", "require": { "php": ">=5.3.0" },}

Page 73: Shifting gears with Composer

// composer.josn{ "name": "monolog/monolog", "type": "library", "description": "Logging for PHP 5.3", "keywords": ["log","logging"], "homepage": "http://github.com/Seldaek/monolog", "license": "MIT", "authors": [ { "name": "Jordi Boggiano", "email": "[email protected]", "homepage": "http://seld.be", "role": "Developer" } ], "require": { "php": ">=5.3.0" }, "autoload": { "psr-0": { "Monolog": "src" } }}

Page 74: Shifting gears with Composer

// composer.josn{ "name": "monolog/monolog", "type": "library", "description": "Logging for PHP 5.3", "keywords": ["log","logging"], "homepage": "http://github.com/Seldaek/monolog", "license": "MIT", "authors": [ { "name": "Jordi Boggiano", "email": "[email protected]", "homepage": "http://seld.be", "role": "Developer" } ], "require": { "php": ">=5.3.0" }, "autoload": { "psr-0": { "Monolog": "src" } }}

Page 75: Shifting gears with Composer

// composer.josn{ "name": "monolog/monolog", "type": "library", "description": "Logging for PHP 5.3", "keywords": ["log","logging"], "homepage": "http://github.com/Seldaek/monolog", "license": "MIT", "authors": [ { "name": "Jordi Boggiano", "email": "[email protected]", "homepage": "http://seld.be", "role": "Developer" } ], "require": { "php": ">=5.3.0" }, "autoload": { "psr-0": { "Monolog": "src" } }}

Page 76: Shifting gears with Composer

// composer.josn{ "name": "monolog/monolog", "type": "library", "description": "Logging for PHP 5.3", "keywords": ["log","logging"], "homepage": "http://github.com/Seldaek/monolog", "license": "MIT", "authors": [ { "name": "Jordi Boggiano", "email": "[email protected]", "homepage": "http://seld.be", "role": "Developer" } ], "require": { "php": ">=5.3.0" }, "autoload": { "psr-0": { "Monolog": "src" } }}

Page 77: Shifting gears with Composer

// composer.josn{ "name": "monolog/monolog", "type": "library", "description": "Logging for PHP 5.3", "keywords": ["log","logging"], "homepage": "http://github.com/Seldaek/monolog", "license": "MIT", "authors": [ { "name": "Jordi Boggiano", "email": "[email protected]", "homepage": "http://seld.be", "role": "Developer" } ], "require": { "php": ">=5.3.0" }, "autoload": { "psr-0": { "Monolog": "src" } }}

Page 78: Shifting gears with Composer

// composer.josn{ "name": "monolog/monolog", "type": "library", "description": "Logging for PHP 5.3", "keywords": ["log","logging"], "homepage": "http://github.com/Seldaek/monolog", "license": "MIT", "authors": [ { "name": "Jordi Boggiano", "email": "[email protected]", "homepage": "http://seld.be", "role": "Developer" } ], "require": { "php": ">=5.3.0" }, "autoload": { "psr-0": { "Monolog": "src" } }}

Page 79: Shifting gears with Composer

// composer.josn{ "name": "monolog/monolog", "type": "library", "description": "Logging for PHP 5.3", "keywords": ["log","logging"], "homepage": "http://github.com/Seldaek/monolog", "license": "MIT", "authors": [ { "name": "Jordi Boggiano", "email": "[email protected]", "homepage": "http://seld.be", "role": "Developer" } ], "require": { "php": ">=5.3.0" }, "autoload": { "psr-0": { "Monolog": "src" } }}

Page 80: Shifting gears with Composer

// composer.josn{ "name": "monolog/monolog", "type": "library", "description": "Logging for PHP 5.3", "keywords": ["log","logging"], "homepage": "http://github.com/Seldaek/monolog", "license": "MIT", "authors": [ { "name": "Jordi Boggiano", "email": "[email protected]", "homepage": "http://seld.be", "role": "Developer" } ], "require": { "php": ">=5.3.0" }, "autoload": { "psr-0": { "Monolog": "src" } }}

Page 81: Shifting gears with Composer

// composer.josn{ "name": "monolog/monolog", "type": "library", "description": "Logging for PHP 5.3", "keywords": ["log","logging"], "homepage": "http://github.com/Seldaek/monolog", "license": "MIT", "authors": [ { "name": "Jordi Boggiano", "email": "[email protected]", "homepage": "http://seld.be", "role": "Developer" } ], "require": { "php": ">=5.3.0" }, "autoload": { "psr-0": { "Monolog": "src" } }}

Page 82: Shifting gears with Composer

// composer.josn{ "name": "monolog/monolog", "type": "library", "description": "Logging for PHP 5.3", "keywords": ["log","logging"], "homepage": "http://github.com/Seldaek/monolog", "license": "MIT", "authors": [ { "name": "Jordi Boggiano", "email": "[email protected]", "homepage": "http://seld.be", "role": "Developer" } ], "require": { "php": ">=5.3.0" }, "autoload": { "psr-0": { "Monolog": "src" } }}

Page 83: Shifting gears with Composer

// composer.josn{ "name": "monolog/monolog", "type": "library", "description": "Logging for PHP 5.3", "keywords": ["log","logging"], "homepage": "http://github.com/Seldaek/monolog", "license": "MIT", "authors": [ { "name": "Jordi Boggiano", "email": "[email protected]", "homepage": "http://seld.be", "role": "Developer" } ], "require": { "php": ">=5.3.0" }, "autoload": { "psr-0": { "Monolog": "src" } }}

Page 84: Shifting gears with Composer

// composer.josn{ "name": "monolog/monolog", "type": "library", "description": "Logging for PHP 5.3", "keywords": ["log","logging"], "homepage": "http://github.com/Seldaek/monolog", "license": "MIT", "authors": [ { "name": "Jordi Boggiano", "email": "[email protected]", "homepage": "http://seld.be", "role": "Developer" } ], "require": { "php": ">=5.3.0" }, "autoload": { "psr-0": { "Monolog": "src" } }}

Page 85: Shifting gears with Composer

// composer.josn{ "name": "monolog/monolog", "type": "library", "description": "Logging for PHP 5.3", "keywords": ["log","logging"], "homepage": "http://github.com/Seldaek/monolog", "license": "MIT", "authors": [ { "name": "Jordi Boggiano", "email": "[email protected]", "homepage": "http://seld.be", "role": "Developer" } ], "require": { "php": ">=5.3.0" }, "autoload": { "psr-0": { "Monolog": "src" } }}

Page 86: Shifting gears with Composer

// composer.josn{ "name": "monolog/monolog", "type": "library", "description": "Logging for PHP 5.3", "keywords": ["log","logging"], "homepage": "http://github.com/Seldaek/monolog", "license": "MIT", "authors": [ { "name": "Jordi Boggiano", "email": "[email protected]", "homepage": "http://seld.be", "role": "Developer" } ], "require": { "php": ">=5.3.0" }, "autoload": { "psr-0": { "Monolog": "src" } }}

Page 87: Shifting gears with Composer

// composer.josn{ "name": "monolog/monolog", "type": "library", "description": "Logging for PHP 5.3", "keywords": ["log","logging"], "homepage": "http://github.com/Seldaek/monolog", "license": "MIT", "authors": [ { "name": "Jordi Boggiano", "email": "[email protected]", "homepage": "http://seld.be", "role": "Developer" } ], "require": { "php": ">=5.3.0" }, "autoload": { "psr-0": { "Monolog": "src" } }}

Page 88: Shifting gears with Composer

// composer.josn{ "name": "monolog/monolog", [ ... ] "autoload": { "psr-0": { "Monolog": ["src", "lib"] } }}

Page 89: Shifting gears with Composer

// composer.josn{ "name": "monolog/monolog", [ ... ] "autoload": { "classmap": ["src", "lib"] }}

Page 90: Shifting gears with Composer

// composer.josn{ "name": "monolog/monolog", [ ... ] "autoload": { "files": "src/myfunctions.php" }}

Page 91: Shifting gears with Composer
Page 92: Shifting gears with Composer

Excuse #1

I need to use a patched version of Symfony

Page 93: Shifting gears with Composer

// composer.json{ "repositories": [ { "type" : "cvs", "url" : "http://github.com/loalf/symfony" } ], "require": { "symfony/symfony" : "dev-patch2" }}

Page 94: Shifting gears with Composer

// composer.json{ "repositories": [ { "type" : "cvs", "url" : "http://github.com/loalf/symfony" } ], "require": { "symfony/symfony" : "dev-patch2" }}

Page 95: Shifting gears with Composer

// composer.json{ "repositories": [ { "type" : "cvs", "url" : "http://github.com/loalf/symfony" } ], "require": { "symfony/symfony" : "dev-patch2" }}

Page 96: Shifting gears with Composer

// composer.json{ "repositories": [ { "type" : "cvs", "url" : "http://github.com/loalf/symfony" } ], "require": { "symfony/symfony" : "dev-patch2" }}

Page 97: Shifting gears with Composer

// composer.json{ "repositories": [ { "type" : "cvs", "url" : "http://github.com/loalf/symfony" } ], "require": { "symfony/symfony" : "dev-patch2" }}

Page 98: Shifting gears with Composer

// composer.json{ "repositories": [ { "type" : "cvs", "url" : "http://github.com/loalf/symfony" } ], "require": { "symfony/symfony" : "dev-patch2" }}

Page 99: Shifting gears with Composer

// composer.json{ "repositories": [ { "type" : "cvs", "url" : "http://github.com/loalf/symfony" } ], "require": { "symfony/symfony" : "dev-patch2" }}

Page 100: Shifting gears with Composer

// composer.json{ "repositories": [ { "type" : "cvs", "url" : "http://github.com/loalf/symfony" } ], "require": { "symfony/symfony" : "dev-patch2" }}

Page 101: Shifting gears with Composer

// composer.json{ "repositories": [ { "type" : "cvs", "url" : "http://github.com/loalf/symfony" } ], "require": { "symfony/symfony" : "dev-patch2" }}

Page 102: Shifting gears with Composer

Excuse #2

Some dependecies are in my own private SVN repo

Page 103: Shifting gears with Composer

// composer.json{ "repositories": [ { "type" : "cvs", "url" : "svn://company.com/lib" } ], "require": { "company/lib" : "1.2.1" }}

Page 104: Shifting gears with Composer

// composer.json{ "repositories": [ { "type" : "cvs", "url" : "svn://company.com/lib" } ], "require": { "company/lib" : "1.2.1" }}

Page 105: Shifting gears with Composer

// composer.json{ "repositories": [ { "type" : "cvs", "url" : "svn://company.com/lib" } ], "require": { "company/lib" : "1.2.1" }}

Page 106: Shifting gears with Composer

// composer.json{ "repositories": [ { "type" : "cvs", "url" : "svn://company.com/lib" } ], "require": { "company/lib" : "1.2.1" }}

Page 107: Shifting gears with Composer

// composer.json{ "repositories": [ { "type" : "cvs", "url" : "svn://company.com/lib" } ], "require": { "company/lib" : "1.2.1" }}

Page 108: Shifting gears with Composer

// composer.json{ "repositories": [ { "type" : "cvs", "url" : "svn://company.com/lib" } ], "require": { "company/lib" : "1.2.1" }}

Page 109: Shifting gears with Composer

// composer.json{ "repositories": [ { "type" : "cvs", "url" : "svn://company.com/lib" } ], "require": { "company/lib" : "1.2.1" }}

Page 110: Shifting gears with Composer

// composer.json{ "repositories": [ { "type" : "cvs", "url" : "svn://company.com/lib" } ], "require": { "company/lib" : "1.2.1" }}

Page 111: Shifting gears with Composer

// composer.json{ "repositories": [ { "type" : "cvs", "url" : "svn://company.com/lib" } ], "require": { "company/lib" : "1.2.1" }}

Page 112: Shifting gears with Composer

Excuse #3

I am using PEAR, you said I could use PEAR

Page 113: Shifting gears with Composer

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

Page 114: Shifting gears with Composer

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

Page 115: Shifting gears with Composer

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

Page 116: Shifting gears with Composer

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

Page 117: Shifting gears with Composer

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

Page 118: Shifting gears with Composer

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

Page 119: Shifting gears with Composer

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

Page 120: Shifting gears with Composer

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

Page 121: Shifting gears with Composer

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

Page 122: Shifting gears with Composer

Excuse #4

My origin doesn´t have a composer.json file

Page 123: Shifting gears with Composer

// composer.json{ "repositories" : [ { "type": "package", "package": { "name": "jquery/jquery", "version": "1.7.2", "dist": { "url": "http://code.jquery.com/jquery-1.7.2.js", "type": "file" } } } ], "require" : { "jquery/jquery" : "1.7.2" }}

Page 124: Shifting gears with Composer

// composer.json{ "repositories" : [ { "type": "package", "package": { "name": "jquery/jquery", "version": "1.7.2", "dist": { "url": "http://code.jquery.com/jquery-1.7.2.js", "type": "file" } } } ], "require" : { "jquery/jquery" : "1.7.2" }}

Page 125: Shifting gears with Composer

// composer.json{ "repositories" : [ { "type": "package", "package": { "name": "jquery/jquery", "version": "1.7.2", "dist": { "url": "http://code.jquery.com/jquery-1.7.2.js", "type": "file" } } } ], "require" : { "jquery/jquery" : "1.7.2" }}

Page 126: Shifting gears with Composer

// composer.json{ "repositories" : [ { "type": "package", "package": { "name": "jquery/jquery", "version": "1.7.2", "dist": { "url": "http://code.jquery.com/jquery-1.7.2.js", "type": "file" } } } ], "require" : { "jquery/jquery" : "1.7.2" }}

Page 127: Shifting gears with Composer

// composer.json{ "repositories" : [ { "type": "package", "package": { "name": "jquery/jquery", "version": "1.7.2", "dist": { "url": "http://code.jquery.com/jquery-1.7.2.js", "type": "file" } } } ], "require" : { "jquery/jquery" : "1.7.2" }}

Page 128: Shifting gears with Composer

// composer.json{ "repositories" : [ { "type": "package", "package": { "name": "jquery/jquery", "version": "1.7.2", "dist": { "url": "http://code.jquery.com/jquery-1.7.2.js", "type": "file" } } } ], "require" : { "jquery/jquery" : "1.7.2" }}

Page 129: Shifting gears with Composer

// composer.json{ "repositories" : [ { "type": "package", "package": { "name": "jquery/jquery", "version": "1.7.2", "dist": { "url": "http://code.jquery.com/jquery-1.7.2.js", "type": "file" } } } ], "require" : { "jquery/jquery" : "1.7.2" }}

Page 130: Shifting gears with Composer

// composer.json{ "repositories" : [ { "type": "package", "package": { "name": "jquery/jquery", "version": "1.7.2", "dist": { "url": "http://code.jquery.com/jquery-1.7.2.js", "type": "file" } } } ], "require" : { "jquery/jquery" : "1.7.2" }}

Page 131: Shifting gears with Composer

// composer.json{ "repositories" : [ { "type": "package", "package": { "name": "jquery/jquery", "version": "1.7.2", "dist": { "url": "http://code.jquery.com/jquery-1.7.2.js", "type": "file" } } } ], "require" : { "jquery/jquery" : "1.7.2" }}

Page 132: Shifting gears with Composer

// composer.json{ "repositories" : [ { "type": "package", "package": { "name": "jquery/jquery", "version": "1.7.2", "dist": { "url": "http://code.jquery.com/jquery-1.7.2.js", "type": "file" } } } ], "require" : { "jquery/jquery" : "1.7.2" }}

Page 133: Shifting gears with Composer

// composer.json{ "repositories" : [ { "type": "package", "package": { "name": "jquery/jquery", "version": "1.7.2", "dist": { "url": "http://code.jquery.com/jquery-1.7.2.js", "type": "file" } } } ], "require" : { "jquery/jquery" : "1.7.2" }}

Page 134: Shifting gears with Composer

Excuse #5

I need a private package repository, but Packagist is too demanding

Page 136: Shifting gears with Composer

Reasons to composer

Page 137: Shifting gears with Composer

1200watchs

250forks

Page 138: Shifting gears with Composer
Page 139: Shifting gears with Composer
Page 140: Shifting gears with Composer

2011-09 2011-11 2012-01 2012-03 2012-05 2012-077 48139

204347

478

692

1004

1447

1881

2418

2703

2703packages

Page 141: Shifting gears with Composer

2011-09 2011-11 2012-01 2012-03 2012-05 2012-077 48139

204347

478

692

1004

1447

1881

2418

2703

2703packages

287588

Page 142: Shifting gears with Composer

+2.5 mill packages installedsince 2012-04-13

Page 143: Shifting gears with Composer
Page 144: Shifting gears with Composer

Resources

Page 145: Shifting gears with Composer

Resources

• getcomposer.org

Page 146: Shifting gears with Composer

Resources

• getcomposer.org

• packagist.org

Page 147: Shifting gears with Composer

Resources

• getcomposer.org

• packagist.org

• github.com/composer

Page 148: Shifting gears with Composer

Thanks!Questions?

Javier Lopez (@loalf)