Composer —  Package Management for PHP. Silver Bullet? Kirill chEbba Chebunin Billix [email_address] http://github.com/chEbba @iamchEbba
Problem
Dependent Libraries
Dependent Libraries
Dependent Libraries
Many Separate Projects
Overview of Tools Python: easy_install, pip Ruby: gems Java: maven, ivy C#(.NET): NuGet, NuPack PHP: PEAR/Pyrus
PEAR. Why NOT? #pyrus mypear = hack Channel1/Package1 != Channel2/Package1 No “Source”, only “Dists” Special Package Type (+/-)
Composer. Silver Bullet?
Composer. Simple #wget  http://getcomposer.org/composer.phar #vi /path/to/project/.composer.json #php composer.phar install PEAR package on release?
Composer. File { "require" :   { "vendor/package1" :   "1.3.2" , "vendor/package2" :   "1.*" , "vendor/package3" :   ">=2.0.3" } }
Composer. Fundamentals Package Repository = Metadata Storage Separated from Repository Unique Package Name = vendor/package Different Storage Types (Downloaders) “ Source” & “Dist” Dependecy Resolver
Composer. Repository File "composer \/ composer" :{ "name" : "composer \/ composer" , "description" : "Package Manager" , "maintainers" :[], "versions" :{ "master-dev" :{ "require" :{ "php" : ">=5.3.0" , "symfony \/ console" : "2.0.5" , "symfony \/ finder" : "2.0.5" } } } }
Composer. Repository PlatformRepository (php & extensions) ComposerRepository ($url/composer.json) PearRepository (PEAR channel support) VcsRepository (github, git, svn, hg) LocalRepository?
Composer. Downloader &quot;source&quot; :{ &quot;type&quot; : &quot;git&quot; , &quot;url&quot; : &quot;http: \/\/ github.com \/ composer \/ composer.git&quot; , &quot;reference&quot; : &quot;e6c3929ea9f7d732ed3352dc06ed950af140ebf7&quot; , &quot;shasum&quot; : &quot;&quot; }, &quot;dist&quot; :{ &quot;type&quot; : &quot;zip&quot; , &quot;url&quot; : &quot;<...>e6c3929ea9f7d732ed3352dc06ed950af140ebf7&quot; , &quot;shasum&quot; : &quot;e32a4bac17d56533393b856699491c4c02f3e1ab&quot; , &quot;reference&quot; : &quot;e6c3929ea9f7d732ed3352dc06ed950af140ebf7&quot; }
Composer. Downloader ZipDownloader (dist) TarDownloader (dist: tar, tar.gz, tar.bz2) PharDownloader (dist) PearDownloader (dist: uses tar) GitDownloader (source) HgDownloader (source)
Composer. Installer LibraryInstaller (vendor/*) &quot;composer \/ composer&quot; :{ &quot;name&quot; : &quot;composer \/ composer&quot; , &quot;description&quot; : &quot;Package Manager&quot; , &quot;type&quot; : &quot;library&quot; }
Composer. Dependency Resolver OpenSUSE's Libzypp satsolver Requires Conflicts Provides Replaces Recommends Suggests
Composer. Dependency Resolver &quot;require&quot; :{ &quot;php&quot; : &quot;>=5.3.0&quot; , &quot;symfony \/ console&quot; : &quot;2.0.5&quot; , &quot;symfony \/ finder&quot; : &quot;2.0.5&quot; }
Composer. Autoload PSR-0 Autoloading (.composer/autoload.php) &quot;versions&quot; :{ &quot;master-dev&quot; :{ &quot;autoload&quot; :{ &quot;psr-0&quot; :{ &quot;Composer&quot; : &quot;src \/ &quot; } } } }
Questions? =)

Composer - Package Management for PHP. Silver Bullet?

  • 1.
    Composer — Package Management for PHP. Silver Bullet? Kirill chEbba Chebunin Billix [email_address] http://github.com/chEbba @iamchEbba
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
    Overview of ToolsPython: easy_install, pip Ruby: gems Java: maven, ivy C#(.NET): NuGet, NuPack PHP: PEAR/Pyrus
  • 8.
    PEAR. Why NOT?#pyrus mypear = hack Channel1/Package1 != Channel2/Package1 No “Source”, only “Dists” Special Package Type (+/-)
  • 9.
  • 10.
    Composer. Simple #wget http://getcomposer.org/composer.phar #vi /path/to/project/.composer.json #php composer.phar install PEAR package on release?
  • 11.
    Composer. File {&quot;require&quot; : { &quot;vendor/package1&quot; : &quot;1.3.2&quot; , &quot;vendor/package2&quot; : &quot;1.*&quot; , &quot;vendor/package3&quot; : &quot;>=2.0.3&quot; } }
  • 12.
    Composer. Fundamentals PackageRepository = Metadata Storage Separated from Repository Unique Package Name = vendor/package Different Storage Types (Downloaders) “ Source” & “Dist” Dependecy Resolver
  • 13.
    Composer. Repository File&quot;composer \/ composer&quot; :{ &quot;name&quot; : &quot;composer \/ composer&quot; , &quot;description&quot; : &quot;Package Manager&quot; , &quot;maintainers&quot; :[], &quot;versions&quot; :{ &quot;master-dev&quot; :{ &quot;require&quot; :{ &quot;php&quot; : &quot;>=5.3.0&quot; , &quot;symfony \/ console&quot; : &quot;2.0.5&quot; , &quot;symfony \/ finder&quot; : &quot;2.0.5&quot; } } } }
  • 14.
    Composer. Repository PlatformRepository(php & extensions) ComposerRepository ($url/composer.json) PearRepository (PEAR channel support) VcsRepository (github, git, svn, hg) LocalRepository?
  • 15.
    Composer. Downloader &quot;source&quot;:{ &quot;type&quot; : &quot;git&quot; , &quot;url&quot; : &quot;http: \/\/ github.com \/ composer \/ composer.git&quot; , &quot;reference&quot; : &quot;e6c3929ea9f7d732ed3352dc06ed950af140ebf7&quot; , &quot;shasum&quot; : &quot;&quot; }, &quot;dist&quot; :{ &quot;type&quot; : &quot;zip&quot; , &quot;url&quot; : &quot;<...>e6c3929ea9f7d732ed3352dc06ed950af140ebf7&quot; , &quot;shasum&quot; : &quot;e32a4bac17d56533393b856699491c4c02f3e1ab&quot; , &quot;reference&quot; : &quot;e6c3929ea9f7d732ed3352dc06ed950af140ebf7&quot; }
  • 16.
    Composer. Downloader ZipDownloader(dist) TarDownloader (dist: tar, tar.gz, tar.bz2) PharDownloader (dist) PearDownloader (dist: uses tar) GitDownloader (source) HgDownloader (source)
  • 17.
    Composer. Installer LibraryInstaller(vendor/*) &quot;composer \/ composer&quot; :{ &quot;name&quot; : &quot;composer \/ composer&quot; , &quot;description&quot; : &quot;Package Manager&quot; , &quot;type&quot; : &quot;library&quot; }
  • 18.
    Composer. Dependency ResolverOpenSUSE's Libzypp satsolver Requires Conflicts Provides Replaces Recommends Suggests
  • 19.
    Composer. Dependency Resolver&quot;require&quot; :{ &quot;php&quot; : &quot;>=5.3.0&quot; , &quot;symfony \/ console&quot; : &quot;2.0.5&quot; , &quot;symfony \/ finder&quot; : &quot;2.0.5&quot; }
  • 20.
    Composer. Autoload PSR-0Autoloading (.composer/autoload.php) &quot;versions&quot; :{ &quot;master-dev&quot; :{ &quot;autoload&quot; :{ &quot;psr-0&quot; :{ &quot;Composer&quot; : &quot;src \/ &quot; } } } }
  • 21.