SlideShare a Scribd company logo
Composing Project
  Dependencies
          Derek Gallo
          @derekgallo
    http://github.com/drock
Problem
•Projects use many libs or
 frameworks
•Most libs have several
 dependencies
•Different projects need
 different versions
An Example
          Project A                   Project B




          PHPUnit                     PHPUnit
            3.7                         3.6




Symfony   PHPUnit           Symfony   PHPUnit
 YAML      Mocks      ...    YAML      Mocks      ...
  2.2       1.3               1.02      1.1
Pear
Project A             Project B

                                  Single shared
                                  dependency

            PHPUnit               No autoloading
              3.7

                                  Not part of build

 Symfony    PHPUnit
  YAML       Mocks       ...
   2.2        1.3
Submodules
          Project A                       Project B




          Symfony     PHPUnit             Symfony     PHPUnit
PHPUnit                         PHPUnit
           YAML        Mocks               YAML        Mocks
  3.7                             3.6
            2.2         1.3                 1.02        1.1



           No autoloading

           No dependency management
Composer!
          Project A                   Project B




          PHPUnit                     PHPUnit
            3.7                         3.6




Symfony   PHPUnit           Symfony   PHPUnit
 YAML      Mocks      ...    YAML      Mocks      ...
  2.2       1.3               1.02      1.1
Composer!

 •Autoloading
 • Dependency Management
 • Per project dependencies
 • Part of build
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.
Installation
  •Locally
   • curl -sS https://getcomposer.org/
      installer | php

  •Globally
   • sudo mv composer.phar /usr/local/bin/
      composer

  • composer selfupdate <- Do regularly
Silex Sample


  •Create empty project
   folder
  •   Create composer.json
Silex Sample
Silex Sample
• >composer install
Silex Sample
  • include autoloader
  • write controller
Silex Sample
  • add monolog
Silex Sample
  • >composer update
Silex Sample
  • add logging code
Defining
Dependencies
        Vendor/Package



                           Version




                           Stability
                         Requirements
Installing
Dependencies
•   >composer install
• downloads
 dependencies to
 vendor folder
•generates
 autoloader
Using Dependencies
  •PSR-0 - Standards
   defining naming
   conventions for
   autoloading.
  •Use composer generated
   autoloader
Updating
Dependencies
 •>composer update
 • upgrades packages to
  latest version based on
  rules in composer.json
Install vs Update
 •composer.lock
  •tracks versions of
    dependencies used
  •commit it
 •install-looks for composer.lock
   then composer.json
 •update-looks straight at
   composer.json and updates
   composer.lock
Working in a Team
•Elect a dependency
 manager
 •  manages and commits
    composer files
•add vendor folder to git/svn
 ignore
Finding Packages

  •Packagist
   • >composer search ...
  • Github
   • look for composer.json
Older Packages
                         Define a package
                        repository in your
                          composer.json


                                             Specify locations of
                                                   sources




                                  Instruct autoloader




• Hopefully its PSR-0 compliant
Bleeding Edge
         Version Tag
                       Version Branch




                         Other Branch
Custom Forks
 • Fork on Github
 • Add your repo
 • Specify your branch
Bootstrapping
>composer create-project -s dev fabpot/silex-skeleton .
More?
 • http://getcomposer.org
 • http://packagist.org
 • https://github.com/php-fig/fig-
   standards/blob/master/accepted/



            Thanks
                  Derek Gallo
                  @derekgallo
            http://github.com/drock

More Related Content

PDF
Apache Maven In 10 Slides
PPTX
Maven 2 Introduction
PPTX
Maven
PPT
Maven Overview
PDF
composer_talk_20160209
PPTX
Gradle Again
PPTX
Introduction to Maven
PPTX
Embrace Maven
Apache Maven In 10 Slides
Maven 2 Introduction
Maven
Maven Overview
composer_talk_20160209
Gradle Again
Introduction to Maven
Embrace Maven

What's hot (20)

PPTX
An introduction to Maven
PPTX
Maven tutorial
PPTX
Maven Basics - Explained
PPTX
S/W Design and Modularity using Maven
PPTX
Log management (elk) for spring boot application
PPTX
Apache Maven
PDF
Patterns in a Containerized World (Matthias Luebken Technology Stream)
PDF
Gr8conf EU 2013 Speed up your development: GroovyServ and Grails Improx Plugin
PPTX
PDF
Introduction to Apache Maven
PPTX
Git workflows
PDF
Maven tutorial for beginners
PDF
MVVM on iOS
PPTX
Behavioural Testing Ruby/Rails Apps @ Scale - Rspec & Cucumber
PPTX
ODP
An Introduction to Maven Part 1
PPTX
Maven ppt
PDF
DevOps Camp 2017 NYC Local Development using Vagrant by Anthony Alvarez
PPTX
CollabSphere 2018 - Java in Domino After XPages
An introduction to Maven
Maven tutorial
Maven Basics - Explained
S/W Design and Modularity using Maven
Log management (elk) for spring boot application
Apache Maven
Patterns in a Containerized World (Matthias Luebken Technology Stream)
Gr8conf EU 2013 Speed up your development: GroovyServ and Grails Improx Plugin
Introduction to Apache Maven
Git workflows
Maven tutorial for beginners
MVVM on iOS
Behavioural Testing Ruby/Rails Apps @ Scale - Rspec & Cucumber
An Introduction to Maven Part 1
Maven ppt
DevOps Camp 2017 NYC Local Development using Vagrant by Anthony Alvarez
CollabSphere 2018 - Java in Domino After XPages
Ad

Similar to Composing Project Dependencies (20)

PDF
Dependency management with Composer
PDF
Composer, putting dependencies on the score
PDF
Composer for Busy Developers - php|tek13
PDF
Composer: putting dependencies on the score
PDF
Composer for busy developers - DPC13
PDF
Development and deployment with composer and kite
PDF
Composer - The missing package manager for PHP
KEY
Composer
PDF
Composer the Right Way - MM16NL
PPTX
PHP Dependency Management with Composer
PDF
Leveraging Composer in Existing Projects
PPTX
Composer Lightning Talk
PDF
Mastering composer
PDF
Game Changing Dependency Management
PDF
Php Dependency Management with Composer ZendCon 2017
PDF
Beginning with Composer - Dependency manager in php
PDF
Composer the right way
PDF
Php Dependency Management with Composer ZendCon 2016
PDF
WordCamp Sacramento 2019: Modernizing Your Development Workflow Using Composer
PDF
12 Composer #burningkeyboards
Dependency management with Composer
Composer, putting dependencies on the score
Composer for Busy Developers - php|tek13
Composer: putting dependencies on the score
Composer for busy developers - DPC13
Development and deployment with composer and kite
Composer - The missing package manager for PHP
Composer
Composer the Right Way - MM16NL
PHP Dependency Management with Composer
Leveraging Composer in Existing Projects
Composer Lightning Talk
Mastering composer
Game Changing Dependency Management
Php Dependency Management with Composer ZendCon 2017
Beginning with Composer - Dependency manager in php
Composer the right way
Php Dependency Management with Composer ZendCon 2016
WordCamp Sacramento 2019: Modernizing Your Development Workflow Using Composer
12 Composer #burningkeyboards
Ad

Recently uploaded (20)

PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
Network Security Unit 5.pdf for BCA BBA.
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PPTX
Big Data Technologies - Introduction.pptx
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PDF
cuic standard and advanced reporting.pdf
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PDF
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
Empathic Computing: Creating Shared Understanding
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PPTX
Cloud computing and distributed systems.
Building Integrated photovoltaic BIPV_UPV.pdf
Network Security Unit 5.pdf for BCA BBA.
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
Digital-Transformation-Roadmap-for-Companies.pptx
Big Data Technologies - Introduction.pptx
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
Agricultural_Statistics_at_a_Glance_2022_0.pdf
MIND Revenue Release Quarter 2 2025 Press Release
cuic standard and advanced reporting.pdf
Advanced methodologies resolving dimensionality complications for autism neur...
“AI and Expert System Decision Support & Business Intelligence Systems”
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
Dropbox Q2 2025 Financial Results & Investor Presentation
Diabetes mellitus diagnosis method based random forest with bat algorithm
Empathic Computing: Creating Shared Understanding
NewMind AI Weekly Chronicles - August'25 Week I
Understanding_Digital_Forensics_Presentation.pptx
Cloud computing and distributed systems.

Composing Project Dependencies

  • 1. Composing Project Dependencies Derek Gallo @derekgallo http://github.com/drock
  • 2. Problem •Projects use many libs or frameworks •Most libs have several dependencies •Different projects need different versions
  • 3. An Example Project A Project B PHPUnit PHPUnit 3.7 3.6 Symfony PHPUnit Symfony PHPUnit YAML Mocks ... YAML Mocks ... 2.2 1.3 1.02 1.1
  • 4. Pear Project A Project B Single shared dependency PHPUnit No autoloading 3.7 Not part of build Symfony PHPUnit YAML Mocks ... 2.2 1.3
  • 5. Submodules Project A Project B Symfony PHPUnit Symfony PHPUnit PHPUnit PHPUnit YAML Mocks YAML Mocks 3.7 3.6 2.2 1.3 1.02 1.1 No autoloading No dependency management
  • 6. Composer! Project A Project B PHPUnit PHPUnit 3.7 3.6 Symfony PHPUnit Symfony PHPUnit YAML Mocks ... YAML Mocks ... 2.2 1.3 1.02 1.1
  • 7. Composer! •Autoloading • Dependency Management • Per project dependencies • Part of build
  • 8. 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.
  • 9. Installation •Locally • curl -sS https://getcomposer.org/ installer | php •Globally • sudo mv composer.phar /usr/local/bin/ composer • composer selfupdate <- Do regularly
  • 10. Silex Sample •Create empty project folder • Create composer.json
  • 13. Silex Sample • include autoloader • write controller
  • 14. Silex Sample • add monolog
  • 15. Silex Sample • >composer update
  • 16. Silex Sample • add logging code
  • 17. Defining Dependencies Vendor/Package Version Stability Requirements
  • 18. Installing Dependencies • >composer install • downloads dependencies to vendor folder •generates autoloader
  • 19. Using Dependencies •PSR-0 - Standards defining naming conventions for autoloading. •Use composer generated autoloader
  • 20. Updating Dependencies •>composer update • upgrades packages to latest version based on rules in composer.json
  • 21. Install vs Update •composer.lock •tracks versions of dependencies used •commit it •install-looks for composer.lock then composer.json •update-looks straight at composer.json and updates composer.lock
  • 22. Working in a Team •Elect a dependency manager • manages and commits composer files •add vendor folder to git/svn ignore
  • 23. Finding Packages •Packagist • >composer search ... • Github • look for composer.json
  • 24. Older Packages Define a package repository in your composer.json Specify locations of sources Instruct autoloader • Hopefully its PSR-0 compliant
  • 25. Bleeding Edge Version Tag Version Branch Other Branch
  • 26. Custom Forks • Fork on Github • Add your repo • Specify your branch
  • 27. Bootstrapping >composer create-project -s dev fabpot/silex-skeleton .
  • 28. More? • http://getcomposer.org • http://packagist.org • https://github.com/php-fig/fig- standards/blob/master/accepted/ Thanks Derek Gallo @derekgallo http://github.com/drock