Slide 1

Slide 1 text

Composer Tips & Tricks Making the most of using Composer

Slide 2

Slide 2 text

What is Composer? PHP dependency manager

Slide 3

Slide 3 text

Authors of Composer Jordi Boggiano @Seldaek Nils Adermann @naderman

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

● 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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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;

Slide 13

Slide 13 text

Travis CI Build Matrix

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

composer depends Shows which packages depend on a package

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

composer prohibits

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

Bonus: Facebook mention-bot

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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