Top Banner
COMPOSER The missing package manager for PHP
113

Composer - The missing package manager for PHP

Aug 27, 2014

Download

Software

Tareq Hasan

I gave the talk in on 6th June, 2014 at Digital World developer conference at Bangabandhu International Conference Center (BICC) in Dhaka, Bangladesh.
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Composer - The missing package manager for PHP

COMPOSERThe missing package manager for PHP

Page 2: Composer - The missing package manager for PHP

PyPi

Page 3: Composer - The missing package manager for PHP

Common Web Languages

Page 4: Composer - The missing package manager for PHP

Communities inside PHP

Page 5: Composer - The missing package manager for PHP

SHARING WASN’T CARING• Autoloading PHP Classes

• Dependencies?

• Where does this thing go?

Page 6: Composer - The missing package manager for PHP

WHY BOTHER?• As a developer, you want to use consistent

version of libraries/dependencies and tools

• Consistent versioning across all team members

• Share your own library

Page 7: Composer - The missing package manager for PHP

WHY BOTHER?More developers, more dependency problem

PHPUnit 3.6.10 Behat 2.3.5 Monolog 1.0

PHPUnit 3.4.15 Behat 2.2 Monolog 1.2

Hasin Rifat

Page 8: Composer - The missing package manager for PHP

SOLUTIONS• PEAR

• SVN Externals

• Git Submodules

• Vendor Management Scripts

Page 9: Composer - The missing package manager for PHP

SOLUTIONS• PEAR

• SVN Externals

• Git Submodules

• Vendor Management Scripts

Page 10: Composer - The missing package manager for PHP

SOLUTIONS• PEAR

• SVN Externals

• Git Submodules

• Vendor Management Scripts

Page 11: Composer - The missing package manager for PHP

SOLUTIONS• PEAR

• SVN Externals

• Git Submodules

• Vendor Management Scripts

Page 12: Composer - The missing package manager for PHP

SOLUTIONS• PEAR

• SVN Externals

• Git Submodules

• Vendor Management Scripts

Page 13: Composer - The missing package manager for PHP

SOLUTIONS• PEAR

• SVN Externals

• Git Submodules

• Vendor Management Scripts

Composer!

Page 14: Composer - The missing package manager for PHP

Isn’t PEAR and the PEAR installer the de-facto PHP package manager?

Page 15: Composer - The missing package manager for PHP

Isn’t PEAR and the PEAR installer the de-facto PHP package manager?

Yep

Page 16: Composer - The missing package manager for PHP

Why not PEAR?• PEAR tends to be used globally*

• Composer is intended to be used in a per-project manner

• Spread out channels

• Strict Standards

* pear can be installed per-project. But we are not gonna talk about it.

Page 17: Composer - The missing package manager for PHP

COMMON SOLUTION$ cd ~/projects/my_awesome_project/vendor/$ mkdir Behat && cd Behat$ wget https://github.com/downloads/Behat/Behat/behat.phar$ cd ../../$ php vendor/Behat/behat.phar tests/features/

Page 18: Composer - The missing package manager for PHP

COMMON SOLUTION$ cd ~/projects/my_awesome_project/vendor/$ mkdir Behat && cd Behat$ wget https://github.com/downloads/Behat/Behat/behat.phar$ cd ../../$ php vendor/Behat/behat.phar tests/features/

Or use a git submodule… or an SVN external if it’s still 2007

Page 19: Composer - The missing package manager for PHP

COMMON SOLUTION$ cd ~/projects/my_awesome_project/vendor/$ mkdir Behat && cd Behat$ wget https://github.com/downloads/Behat/Behat/behat.phar$ cd ../../$ php vendor/Behat/behat.phar tests/features/

Or use a git submodule… or an SVN external if it’s still 2007

BUT, we can do better…

Page 20: Composer - The missing package manager for PHP

http://getcomposer.org

Page 21: Composer - The missing package manager for PHP

Install Composer

Page 22: Composer - The missing package manager for PHP

Install Composer

With PEAR

Page 23: Composer - The missing package manager for PHP

Install Composer

With PEAR

For Maximum Trolling

Page 24: Composer - The missing package manager for PHP

Install Composer

With PEAR

For Maximum Trolling

Page 25: Composer - The missing package manager for PHP

Install Composer

With PEAR

For Maximum TrollingI am kidding!

Page 26: Composer - The missing package manager for PHP

INSTALLING COMPOSER

Page 27: Composer - The missing package manager for PHP

INSTALLING COMPOSERLocally $ curl -sS https://getcomposer.org/installer | php

Page 28: Composer - The missing package manager for PHP

INSTALLING COMPOSERLocally $ curl -sS https://getcomposer.org/installer | php

Page 29: Composer - The missing package manager for PHP

INSTALLING COMPOSERLocally $ curl -sS https://getcomposer.org/installer | php

Globally $ curl -sS https://getcomposer.org/installer | php$ mv composer.phar /usr/local/bin/composer

Page 30: Composer - The missing package manager for PHP

Now You Can Use Composer

Page 31: Composer - The missing package manager for PHP

I Am Building A ProjectHow Composer can help me?

Page 32: Composer - The missing package manager for PHP

COMPOSER 101Getting the dependencies

Page 33: Composer - The missing package manager for PHP

COMPOSER 101Getting the dependencies

$ cd ~/Desktop/composer-test/

Page 34: Composer - The missing package manager for PHP

COMPOSER 101Getting the dependencies

$ cd ~/Desktop/composer-test/$ vi composer.json

Page 35: Composer - The missing package manager for PHP

COMPOSER 101Getting the dependencies

$ cd ~/Desktop/composer-test/$ vi composer.json put this in your project root

Page 36: Composer - The missing package manager for PHP

COMPOSER 101Getting the dependencies

$ cd ~/Desktop/composer-test/$ vi composer.json put this in your project root

Page 37: Composer - The missing package manager for PHP

COMPOSER 101Getting the dependencies

$ cd ~/Desktop/composer-test/$ vi composer.json put this in your project root

• Exact version • Range • Wildcard • Tilde

Page 38: Composer - The missing package manager for PHP

COMPOSER 101Getting the dependencies

$ cd ~/Desktop/composer-test/$ vi composer.json

$ composer.phar install

put this in your project root

• Exact version • Range • Wildcard • Tilde

Page 39: Composer - The missing package manager for PHP
Page 40: Composer - The missing package manager for PHP
Page 41: Composer - The missing package manager for PHP

Your dependency

Page 42: Composer - The missing package manager for PHP

Your dependency

Page 43: Composer - The missing package manager for PHP

Your dependency’s dependencies

Your dependency

Page 44: Composer - The missing package manager for PHP

Your dependency’s dependencies

Your dependency

Page 45: Composer - The missing package manager for PHP

Your dependency’s dependencies

Your dependency

Suggested Package

Page 46: Composer - The missing package manager for PHP

Checking Server Requirements

I need your server to have these…

Page 47: Composer - The missing package manager for PHP

File Organisation

vendor/autoload.php

Page 48: Composer - The missing package manager for PHP

Using The Libraries

Page 49: Composer - The missing package manager for PHP

Using The Libraries

require_once 'vendor/autload.php';

Page 50: Composer - The missing package manager for PHP

Using The Libraries

require_once 'vendor/autload.php';

Include the libraries

Page 51: Composer - The missing package manager for PHP

Using The Libraries

require_once 'vendor/autload.php';

Include the libraries

Start using it

Page 52: Composer - The missing package manager for PHP

Using The Libraries

require_once 'vendor/autload.php';

Include the libraries

Start using it

As simple as that

Page 53: Composer - The missing package manager for PHP

Installing, Updating And Moving On

How does Composer guarantee consistency?

Page 54: Composer - The missing package manager for PHP

composer.json composer.lock

Page 55: Composer - The missing package manager for PHP

composer.json composer.lock

Metadata and list your dependencies

Page 56: Composer - The missing package manager for PHP

composer.json composer.lock

Metadata and list your dependencies

Existing dependencies and current commit hashes

Page 57: Composer - The missing package manager for PHP

composer.json composer.lock

Page 58: Composer - The missing package manager for PHP

composer.json composer.lock

Update

Page 59: Composer - The missing package manager for PHP

composer.json composer.lock

Update

Page 60: Composer - The missing package manager for PHP

composer.json composer.lock

Update

reads

Page 61: Composer - The missing package manager for PHP

composer.json composer.lock

Update

reads

Page 62: Composer - The missing package manager for PHP

composer.json composer.lock

Update

reads

gets latest

Page 63: Composer - The missing package manager for PHP

composer.json composer.lock

Update

reads

gets latest

Page 64: Composer - The missing package manager for PHP

composer.json composer.lock

Update

reads

gets latest

writes

Page 65: Composer - The missing package manager for PHP

composer.json composer.lock

Update Install

reads

gets latest

writes

Page 66: Composer - The missing package manager for PHP

composer.json composer.lock

Update Install

reads

gets latest

writes

Page 67: Composer - The missing package manager for PHP

composer.json composer.lock

Update Install

reads

gets latest

writes

reads

Page 68: Composer - The missing package manager for PHP

composer.json composer.lock

Update Install

reads

gets latest

writes

reads

Page 69: Composer - The missing package manager for PHP

composer.json composer.lock

Update Install

reads

gets latest

writes

reads

compares

Page 70: Composer - The missing package manager for PHP

composer.json composer.lock

Update Install

reads

gets latest

writes

reads

compares

Page 71: Composer - The missing package manager for PHP

composer.json composer.lock

Update Install

reads

gets latest

writes

reads

compares

gets locked version

Page 72: Composer - The missing package manager for PHP

Keep The Team On The Same Page

• Commit composer.lock into the repository • Use composer install

• Ignore the vendor directory

Page 73: Composer - The missing package manager for PHP

A Contributor Appears

Page 74: Composer - The missing package manager for PHP

A Contributor Appears$ git clone [email protected]:tareq1988/composer-test.git

Page 75: Composer - The missing package manager for PHP

A Contributor Appears$ git clone [email protected]:tareq1988/composer-test.git

$ composer install

Page 76: Composer - The missing package manager for PHP

A Contributor Appears$ git clone [email protected]:tareq1988/composer-test.git

$ composer install

Page 77: Composer - The missing package manager for PHP

A Contributor Appears$ git clone [email protected]:tareq1988/composer-test.git

$ composer install

Page 78: Composer - The missing package manager for PHP

A Contributor Appears$ git clone [email protected]:tareq1988/composer-test.git

$ composer install

Lock File

Page 79: Composer - The missing package manager for PHP

Adding A New Package$ composer.phar require symfony/yaml=~2.1.0

Page 80: Composer - The missing package manager for PHP

Finding A Package

Page 81: Composer - The missing package manager for PHP

https://packagist.org/

Page 82: Composer - The missing package manager for PHP
Page 83: Composer - The missing package manager for PHP
Page 84: Composer - The missing package manager for PHP
Page 85: Composer - The missing package manager for PHP
Page 86: Composer - The missing package manager for PHP
Page 87: Composer - The missing package manager for PHP

How Do I Load The Files?PSR-0 and the modern autoloader

Page 88: Composer - The missing package manager for PHP

Composer Generates A Autoload File For All Your

Dependencies

vendor/autoload.php

Page 89: Composer - The missing package manager for PHP

Types Of Autoloading

Page 90: Composer - The missing package manager for PHP

PSR-4 is the recommended way

Types Of Autoloading

Page 91: Composer - The missing package manager for PHP

PSR-4 is the recommended way

Types Of Autoloading

PSR-0 auto loading

Page 92: Composer - The missing package manager for PHP

PSR-4 is the recommended way

Types Of Autoloading

PSR-0 auto loading

PEAR packages and other libraries

Page 93: Composer - The missing package manager for PHP

PSR-4 is the recommended way

Types Of Autoloading

PSR-0 auto loading

PEAR packages and other libraries

PHP Functions and helpers

Page 94: Composer - The missing package manager for PHP

PSR What?

PHP FIG: PHP Framework Interop Group

PSR-0: Autoloading StandardPSR-1: Basic Coding StandardPSR-2: Coding Style Guide PSR-3: Logger Interface PSR-4: Improved Autoloading:

http://www.php-fig.org/

Page 95: Composer - The missing package manager for PHP

PSR What?

PHP FIG: PHP Framework Interop Group

PSR-0: Autoloading StandardPSR-1: Basic Coding StandardPSR-2: Coding Style Guide PSR-3: Logger Interface PSR-4: Improved Autoloading:

http://www.php-fig.org/

Post Standards Recommendation

Page 96: Composer - The missing package manager for PHP

Optimising The Autoloader

• Adding huge library slows down • It calls file_exists every time

Page 97: Composer - The missing package manager for PHP

Optimising The Autoloader

• Adding huge library slows down • It calls file_exists every time

$ composer dump-autoload -o

Page 98: Composer - The missing package manager for PHP

Optimising The Autoloader

• Adding huge library slows down • It calls file_exists every time

$ composer dump-autoload -o

Page 99: Composer - The missing package manager for PHP

Optimising The Autoloader

• Adding huge library slows down • It calls file_exists every time

$ composer dump-autoload -o

Optimize flag

Page 100: Composer - The missing package manager for PHP

Optimising The Autoloader

• Adding huge library slows down • It calls file_exists every time

$ composer dump-autoload -o

Optimize flag

A bit slower, but performance boost

Page 101: Composer - The missing package manager for PHP

I Am Developing A LibraryHow Composer can spread my library around?

Page 102: Composer - The missing package manager for PHP

https://packagist.org/abouthttp://semver.org/

Page 103: Composer - The missing package manager for PHP

https://packagist.org/abouthttp://semver.org/

Name of the library

Page 104: Composer - The missing package manager for PHP

https://packagist.org/abouthttp://semver.org/

Name of the library

Description

Page 105: Composer - The missing package manager for PHP

https://packagist.org/abouthttp://semver.org/

Name of the library

Description

tag

Page 106: Composer - The missing package manager for PHP

https://packagist.org/abouthttp://semver.org/

Name of the library

Description

tag

About you

Page 107: Composer - The missing package manager for PHP

https://packagist.org/abouthttp://semver.org/

Name of the library

Description

tag

About you

Autoloader type

Page 108: Composer - The missing package manager for PHP

I Have A Private RepositoryWill it work if I am developing applications in-house?

• Composer

• VCS

• PEAR

https://getcomposer.org/doc/05-repositories.md

Page 109: Composer - The missing package manager for PHP

Find Out More

http://getcomposer.org

https://packagist.org

https://github.com/composer

composer-dev google group

#composer & #composer-dev

Page 110: Composer - The missing package manager for PHP

Can I Use Composer with WordPress?

http://wpackagist.org/ http://composer.rarst.net/resources

Page 111: Composer - The missing package manager for PHP

Thats All

Page 112: Composer - The missing package manager for PHP

Tareq Hasan

@tareq_cse

Founder, Lead Developer - weDevs

http://tareq.weDevs.com

http://wedevs.com

Page 113: Composer - The missing package manager for PHP

Thanks