Using Composer with WordPress
Micah Wood @wpscholar
wpscholar.com/loopconf2015
Manages Project Dependencies and Versions
Eliminates Duplication
Consistent Versioning
Documentation of Dependencies
Automatic Package Installation
Bulk Package Updates
Class and File Autoloading
Recursive Dependencies
Package Discovery
Installing Composer
Go to https://getcomposer.org/
Click ‘Getting Started’
Find your install method
$ composer diagnoseCheck system for common errors
$ composer initCreate a new composer.json file
$ composer validateValidate your composer.json file
$ composer require packageAdds package to composer.json and installs
$ composer require package --devAdds package to composer.json as a dev requirement and installs
$ composer installDownloads and installs all dependencies
$ composer install --no-devInstall composer dependencies for production environment
$ composer updateChecks for and installs package updates
$ composer update packageChecks for and installs a single package update
$ composer remove packageRemoves package from composer.json and uninstalls
$ composer search packageDiscover packages on packagist.org
$ composer config repositories.package git [email protected]:username/package.git
Add a custom repository
Custom Repositories Require a composer.json File
Run composer init to generate
Specifying Versions
Exact Version 1.0.2
Range of Versions >=1.0,<2.0
Wildcard Version 1.0.*
Next Significant Release Version ~1.2
Version Stability Flags @stable
@rc @beta @alpha @dev
Semantic Versioningsemver.org
2.3.1Increment when you make breaking changes
Major Version
2.3.1Increment when you add backwards compatible features
Minor Version
2.3.1Increment when you make backwards compatible bug fixes
Patch Version
How Composer Works
composer.jsonHow you declare your dependencies
composer.lockHow Composer stores
your dependencies
vendor directoryWhere composer installs your packages
autoload filesrequire __DIR__ . '/vendor/autoload.php';
Using Composer with WordPress
Use Case #1Custom Plugin or Theme
Use Case #2Custom Site or App
$ composer require johnpbloch/wordpressAdd WordPress as a dependency
$ composer config repositories.wpackagist composer http://wpackagist.org/
Add wpackagist.org as a repository
$ composer require composer/installersEnables WordPress themes and plugins to be put in their respective directories
Setup WordPress PathsPlaces WordPress and its themes and plugins in their respective directories
Project Bootstrapping
$ composer create-project packageDownloads project and runs `composer install`
$ composer create-project wpscholar/wp-skeletonSetup a new WordPress project
$ composer create-project wpscholar/vvv-skeletonSetup a new WordPress project using VVV
Thank You!
Micah Wood @wpscholar
wpscholar.com/loopconf2015