Shifting gears with Composer
-
Upload
javier-lopez -
Category
Technology
-
view
1.348 -
download
0
Transcript of Shifting gears with Composer
Shifting gears with Composer
Javier Lopez (@loalf)
Who am I?
Who am I?
• I am from Spain
Who am I?
• I am from Spain• I live in London
Who am I?
• I am from Spain• I live in London• I work for IPC Media
Who am I?
• I am from Spain• I live in London• I work for IPC Media• I tweet as @loalf
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)
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
http://www.flickr.com/photos/jayshep5/5792259218/
Shifting gears
My App
My App
My App
My App
My App
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.
Is it a new concept?
Is it a new concept? Nope.
Is it a new concept?
Node Package Manager
Nope.
Is it a new concept?
Node Package Manager
Ruby Package Manager
Nope.
But, what about PEAR?
But, what about PEAR?
• You have to install it in all the system
But, what about PEAR?
• You have to install it in all the system
• You can´t see the source code
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
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, :)
Installing Composer (locally)
Installing Composer (locally)
mkdir myprojectname
Installing Composer (locally)
mkdir myprojectname
cd myprojectname
Installing Composer (locally)
mkdir myprojectname
cd myprojectname
curl -s https://getcomposer.org/installer | php
Installing Composer (locally)
mkdir myprojectname
cd myprojectname
curl -s https://getcomposer.org/installer | php
Done!
// 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"}
// 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"}
// 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"}
// 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"}
// 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"}
// 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"}
// 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"}
// 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"}
// 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"}
// 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"}
// 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"}
// 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"}
// 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"}
// 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"}
// 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"}
// 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"}
// 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"}
php composer.phar install
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
!"" composer.json
!"" composer.lock
#"" vendor
!"" autoload.php
!"" behat
!"" bin
!"" composer
!"" fabpot
!"" guzzle
!"" monolog
#"" symfony
!"" composer.json
!"" composer.lock
#"" vendor
!"" autoload.php
!"" behat
!"" bin
!"" composer
!"" fabpot
!"" guzzle
!"" monolog
#"" symfony
!"" composer.json
!"" composer.lock
#"" vendor
!"" autoload.php
!"" behat
!"" bin
!"" composer
!"" fabpot
!"" guzzle
!"" monolog
#"" symfony
!"" composer.json
!"" composer.lock
#"" vendor
!"" autoload.php
!"" behat
!"" bin
!"" composer
!"" fabpot
!"" guzzle
!"" monolog
#"" symfony
!"" composer.json
!"" composer.lock
#"" vendor
!"" autoload.php
!"" behat
!"" bin
!"" composer
!"" fabpot
!"" guzzle
!"" monolog
#"" symfony
!"" composer.json
!"" composer.lock
#"" vendor
!"" autoload.php
!"" behat
!"" bin
!"" composer
!"" fabpot
!"" guzzle
!"" monolog
#"" symfony
!"" composer.json
!"" composer.lock
#"" vendor
!"" autoload.php
!"" behat
!"" bin
!"" composer
!"" fabpot
!"" guzzle
!"" monolog
#"" symfony
!"" composer.json
!"" composer.lock
#"" vendor
!"" autoload.php
!"" behat
!"" bin
!"" composer
!"" fabpot
!"" guzzle
!"" monolog
#"" symfony
!"" composer.json
!"" composer.lock
#"" vendor
!"" autoload.php
!"" behat
!"" bin
!"" composer
!"" fabpot
!"" guzzle
!"" monolog
#"" symfony
!"" composer.json
!"" composer.lock
#"" vendor
!"" autoload.php
!"" behat
!"" bin
!"" composer
!"" fabpot
!"" guzzle
!"" monolog
#"" symfony
!"" composer.json
!"" composer.lock
#"" vendor
!"" autoload.php
!"" behat
!"" bin
!"" composer
!"" fabpot
!"" guzzle
!"" monolog
#"" symfony
!"" composer.json
!"" composer.lock
#"" vendor
!"" autoload.php
!"" behat
!"" bin
!"" composer
!"" fabpot
!"" guzzle
!"" monolog
#"" symfony
!"" composer.json
!"" composer.lock
#"" vendor
!"" autoload.php
!"" behat
!"" bin
!"" composer
!"" fabpot
!"" guzzle
!"" monolog
#"" symfony
http://www.flickr.com/photos/jayshep5/5792259218/
http://www.packagist.org
http://www.flickr.com/photos/jayshep5/5792259218/
http://www.flickr.com/photos/jayshep5/5792259218/
// composer.josn{ "name": "monolog/monolog", "require": { "php": ">=5.3.0" },}
// composer.josn{ "name": "monolog/monolog", "require": { "php": ">=5.3.0" },}
// composer.josn{ "name": "monolog/monolog", "require": { "php": ">=5.3.0" },}
// composer.josn{ "name": "monolog/monolog", "require": { "php": ">=5.3.0" },}
// composer.josn{ "name": "monolog/monolog", "require": { "php": ">=5.3.0" },}
// 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" } }}
// 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" } }}
// 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" } }}
// 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" } }}
// 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" } }}
// 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" } }}
// 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" } }}
// 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" } }}
// 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" } }}
// 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" } }}
// 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" } }}
// 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" } }}
// 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" } }}
// 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" } }}
// 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" } }}
// composer.josn{ "name": "monolog/monolog", [ ... ] "autoload": { "psr-0": { "Monolog": ["src", "lib"] } }}
// composer.josn{ "name": "monolog/monolog", [ ... ] "autoload": { "classmap": ["src", "lib"] }}
// composer.josn{ "name": "monolog/monolog", [ ... ] "autoload": { "files": "src/myfunctions.php" }}
Excuse #1
I need to use a patched version of Symfony
// composer.json{ "repositories": [ { "type" : "cvs", "url" : "http://github.com/loalf/symfony" } ], "require": { "symfony/symfony" : "dev-patch2" }}
// composer.json{ "repositories": [ { "type" : "cvs", "url" : "http://github.com/loalf/symfony" } ], "require": { "symfony/symfony" : "dev-patch2" }}
// composer.json{ "repositories": [ { "type" : "cvs", "url" : "http://github.com/loalf/symfony" } ], "require": { "symfony/symfony" : "dev-patch2" }}
// composer.json{ "repositories": [ { "type" : "cvs", "url" : "http://github.com/loalf/symfony" } ], "require": { "symfony/symfony" : "dev-patch2" }}
// composer.json{ "repositories": [ { "type" : "cvs", "url" : "http://github.com/loalf/symfony" } ], "require": { "symfony/symfony" : "dev-patch2" }}
// composer.json{ "repositories": [ { "type" : "cvs", "url" : "http://github.com/loalf/symfony" } ], "require": { "symfony/symfony" : "dev-patch2" }}
// composer.json{ "repositories": [ { "type" : "cvs", "url" : "http://github.com/loalf/symfony" } ], "require": { "symfony/symfony" : "dev-patch2" }}
// composer.json{ "repositories": [ { "type" : "cvs", "url" : "http://github.com/loalf/symfony" } ], "require": { "symfony/symfony" : "dev-patch2" }}
// composer.json{ "repositories": [ { "type" : "cvs", "url" : "http://github.com/loalf/symfony" } ], "require": { "symfony/symfony" : "dev-patch2" }}
Excuse #2
Some dependecies are in my own private SVN repo
// composer.json{ "repositories": [ { "type" : "cvs", "url" : "svn://company.com/lib" } ], "require": { "company/lib" : "1.2.1" }}
// composer.json{ "repositories": [ { "type" : "cvs", "url" : "svn://company.com/lib" } ], "require": { "company/lib" : "1.2.1" }}
// composer.json{ "repositories": [ { "type" : "cvs", "url" : "svn://company.com/lib" } ], "require": { "company/lib" : "1.2.1" }}
// composer.json{ "repositories": [ { "type" : "cvs", "url" : "svn://company.com/lib" } ], "require": { "company/lib" : "1.2.1" }}
// composer.json{ "repositories": [ { "type" : "cvs", "url" : "svn://company.com/lib" } ], "require": { "company/lib" : "1.2.1" }}
// composer.json{ "repositories": [ { "type" : "cvs", "url" : "svn://company.com/lib" } ], "require": { "company/lib" : "1.2.1" }}
// composer.json{ "repositories": [ { "type" : "cvs", "url" : "svn://company.com/lib" } ], "require": { "company/lib" : "1.2.1" }}
// composer.json{ "repositories": [ { "type" : "cvs", "url" : "svn://company.com/lib" } ], "require": { "company/lib" : "1.2.1" }}
// composer.json{ "repositories": [ { "type" : "cvs", "url" : "svn://company.com/lib" } ], "require": { "company/lib" : "1.2.1" }}
Excuse #3
I am using PEAR, you said I could use PEAR
// composer.json{ "repositories": [ { "type" : "pear", "url" : "http://pear2.php.net" } ], "require": { "pear-pear2/PEAR2_HTTP_Request" : "*" }}
// composer.json{ "repositories": [ { "type" : "pear", "url" : "http://pear2.php.net" } ], "require": { "pear-pear2/PEAR2_HTTP_Request" : "*" }}
// composer.json{ "repositories": [ { "type" : "pear", "url" : "http://pear2.php.net" } ], "require": { "pear-pear2/PEAR2_HTTP_Request" : "*" }}
// composer.json{ "repositories": [ { "type" : "pear", "url" : "http://pear2.php.net" } ], "require": { "pear-pear2/PEAR2_HTTP_Request" : "*" }}
// composer.json{ "repositories": [ { "type" : "pear", "url" : "http://pear2.php.net" } ], "require": { "pear-pear2/PEAR2_HTTP_Request" : "*" }}
// composer.json{ "repositories": [ { "type" : "pear", "url" : "http://pear2.php.net" } ], "require": { "pear-pear2/PEAR2_HTTP_Request" : "*" }}
// composer.json{ "repositories": [ { "type" : "pear", "url" : "http://pear2.php.net" } ], "require": { "pear-pear2/PEAR2_HTTP_Request" : "*" }}
// composer.json{ "repositories": [ { "type" : "pear", "url" : "http://pear2.php.net" } ], "require": { "pear-pear2/PEAR2_HTTP_Request" : "*" }}
// composer.json{ "repositories": [ { "type" : "pear", "url" : "http://pear2.php.net" } ], "require": { "pear-pear2/PEAR2_HTTP_Request" : "*" }}
Excuse #4
My origin doesn´t have a composer.json file
// 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" }}
// 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" }}
// 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" }}
// 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" }}
// 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" }}
// 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" }}
// 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" }}
// 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" }}
// 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" }}
// 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" }}
// 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" }}
Excuse #5
I need a private package repository, but Packagist is too demanding
Satis
http://getcomposer.org/doc/articles/handling-private-packages-with-satis.md
Reasons to composer
1200watchs
250forks
2011-09 2011-11 2012-01 2012-03 2012-05 2012-077 48139
204347
478
692
1004
1447
1881
2418
2703
2703packages
2011-09 2011-11 2012-01 2012-03 2012-05 2012-077 48139
204347
478
692
1004
1447
1881
2418
2703
2703packages
287588
+2.5 mill packages installedsince 2012-04-13
Resources
Resources
• getcomposer.org
Resources
• getcomposer.org
• packagist.org
Resources
• getcomposer.org
• packagist.org
• github.com/composer
Thanks!Questions?
Javier Lopez (@loalf)