Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Composer Tips & Tricks

Composer Tips & Tricks

Presented at the Bulgaria PHP User Group meeting in March 2016.
https://www.facebook.com/events/1538125716485720/

Haralan Dobrev

March 10, 2016
Tweet

More Decks by Haralan Dobrev

Other Decks in Programming

Transcript

  1. Composer Tips & Tricks
    Making the most of using Composer

    View Slide

  2. What is Composer?
    PHP dependency manager

    View Slide

  3. Authors of Composer
    Jordi Boggiano
    @Seldaek
    Nils Adermann
    @naderman

    View Slide

  4. ● composer.json
    ● composer init
    ● composer install
    ● composer update
    ● composer require
    ● composer.lock
    Composer basics

    View Slide

  5. composer create-project
    ● Bootstraps your project from another package
    ● Installs dependencies
    ● Provide hooks to execute scripts

    View Slide

  6. ● composer create-project fabpot/silex-skeleton
    ● composer create-project --repository-url=https://repo.
    magento.com/ magento/project-community-edition
    ● composer create-project / foo
    composer create-project

    View Slide

  7. clippings/composer-init
    ● Inspired by grunt-init
    ● composer global require clippings/composer-init
    ● composer-init use clippings/package-template
    ● Learn more at github.com/clippings/composer-init

    View Slide

  8. composer update --with-dependencies
    composer update --with-dependencies vendor/package
    Updates only a package with its dependencies. Does not touch the
    rest of the packages.
    composer require --update-with-dependencies

    View Slide

  9. composer remove --update-with-dependencies
    --update-with-dependencies is now the default for
    composer remove
    composer remove

    View Slide

  10. composer update --prefer-lowest
    composer update --prefer-lowest --prefer-stable
    But when would you want that?
    Testing a library

    View Slide

  11. Travis CI Build Matrix
    php:
    - 5.3
    - 5.4
    - 5.5
    - 5.6
    - 7
    - hhvm
    env:
    - DEPS=normal
    - DEPS=highest
    - DEPS=lowest

    View Slide

  12. Travis CI Build Matrix
    install:
    - if [ "$DEPS" = "normal" ]; then composer install; fi;
    - if [ "$DEPS" = "highest" ]; then composer update; fi;
    - if [ "$DEPS" = "lowest" ]; then composer update --prefer-lowest --prefer-
    stable; fi;

    View Slide

  13. Travis CI Build Matrix

    View Slide

  14. config.platform
    {
    "config": {
    "platform": {
    "php": "5.6"
    }
    }
    }

    View Slide

  15. composer install --prefer-source
    Differences between:
    ● source
    ● dist
    ● auto
    When to use --prefer-source?

    View Slide

  16. config.preferred-install
    {
    "config": {
    "preferred-install": {
    "clippings/*": "source",
    "*": "auto"
    }
    }
    }

    View Slide

  17. composer install --prefer-dist --no-dev
    config.preferred-install

    View Slide

  18. .gitattributes export-ignore
    tests export-ignore
    .travis.yml export-ignore
    .gitattributes export-ignore
    .gitignore export-ignore

    View Slide

  19. composer test
    {
    "scripts": {
    "test": "phpunit"
    }
    }
    composer test

    View Slide

  20. composer run-script
    composer run-script lint
    {
    "require-dev": {
    "squizlabs/php_codesniffer": "^2.5"
    },
    "scripts": {
    "lint": "phpcs"
    }
    }

    View Slide

  21. composer depends
    Shows which packages depend on a package

    View Slide

  22. $ composer depends symfony/yaml
    phpunit/phpunit 4.8.23 requires symfony/yaml (~2.1|~3.0)
    composer depends

    View Slide

  23. composer prohibits

    View Slide

  24. composer prohibits
    $ composer prohibits symfony/yaml:2.0
    phpunit/phpunit 4.8.23 requires symfony/yaml (~2.1|~3.0)

    View Slide

  25. extra.branch-alias
    {
    "extra": {
    "branch-alias": {
    "dev-master": "1.0-dev"
    }
    }
    }

    View Slide

  26. VCS repositories
    {
    "repositories": [
    {
    "type": "vcs",
    "url": "https://github.com/clippings/php-gacx"
    }
    ]
    }

    View Slide

  27. extra.branch-alias
    {
    "extra": {
    "branch-alias": {
    "dev-master": "1.0-dev"
    }
    }
    }
    Read more at getcomposer.org/doc/articles/aliases.md

    View Slide

  28. Bonus: Facebook mention-bot

    View Slide

  29. Facebook mention-bot
    Learn more at github.com/facebook/mention-bot

    View Slide

  30. Who?
    @hkdobrev
    CTO @ Clippings.com
    clippings.github.io
    Thanks!

    View Slide