Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
The Love-Hate Relationship Between Composer and...
Search
Coen Jacobs
September 26, 2015
Programming
0
230
The Love-Hate Relationship Between Composer and WordPress (WordCamp Netherlands 2015)
Coen Jacobs
September 26, 2015
Tweet
Share
More Decks by Coen Jacobs
See All by Coen Jacobs
So You Think You Can Composer?
coenjacobs
0
46
State of WordPress and eCommerce (WordPress meetup Nijmegen september 2015)
coenjacobs
0
340
Other Decks in Programming
See All in Programming
5つのアンチパターンから学ぶLT設計
narihara
1
160
Hypervel - A Coroutine Framework for Laravel Artisans
albertcht
1
110
git worktree × Claude Code × MCP ~生成AI時代の並列開発フロー~
hisuzuya
1
550
#QiitaBash MCPのセキュリティ
ryosukedtomita
1
990
システム成長を止めない!本番無停止テーブル移行の全貌
sakawe_ee
1
160
関数型まつりレポート for JuliaTokai #22
antimon2
0
160
VS Code Update for GitHub Copilot
74th
2
630
20250704_教育事業におけるアジャイルなデータ基盤構築
hanon52_
5
740
XP, Testing and ninja testing
m_seki
3
240
Is Xcode slowly dying out in 2025?
uetyo
1
260
すべてのコンテキストを、 ユーザー価値に変える
applism118
3
1.2k
“いい感じ“な定量評価を求めて - Four Keysとアウトカムの間の探求 -
nealle
1
9.1k
Featured
See All Featured
What's in a price? How to price your products and services
michaelherold
246
12k
4 Signs Your Business is Dying
shpigford
184
22k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
130
19k
Testing 201, or: Great Expectations
jmmastey
42
7.6k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
30
2.1k
Being A Developer After 40
akosma
90
590k
Facilitating Awesome Meetings
lara
54
6.4k
A better future with KSS
kneath
239
17k
Music & Morning Musume
bryan
46
6.6k
How to Ace a Technical Interview
jacobian
277
23k
We Have a Design System, Now What?
morganepeng
53
7.7k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
281
13k
Transcript
The Love-Hate Relationship Between Composer and WordPress @CoenJacobs at #wcnl
2015
Hello My name is Coen Jacobs Developer at Radish Concepts
Jumped out of the bubble Still do WordPress projects
Outside of the WordPress ecosystem, fun stuff happens too!
Composer “Composer is a tool for dependency management in PHP.
It allows you to declare the libraries your project depends on and it will manage (install/ update) them for you.”
What does Composer do? » Load your dependencies » Loads
dependencies of your dependencies » And so on... » Offers a powerful autoloader » Inspired by npm and bundler » Made by Jordi Boggiano
Alright, but how does it work?
Autoloading
Manual loading... require_once 'classes/class-core.php'; require_once 'includes/wpseo-local-functions.php'; require_once 'includes/ajax-functions.php'; require_once 'classes/class-core.php';
require_once 'classes/class-admin.php'; require_once 'classes/class-admin-wrappers.php'; require_once 'classes/class-metaboxes.php'; require_once 'classes/class-frontend.php'; require_once 'classes/class-storelocator.php'; require_once 'classes/class-taxonomy.php';
Classmap: "autoload": { "classmap": [ "includes" ] } PSR-4: "autoload":
{ "psr-4": {"Never5\\ WPNotificationCenter\\": "src/"} }
Just add require 'vendor/autoload.php'; That's it Does this for dependencies
as well
Even PHP 5.2 compatible
All plugins should use Composer autoloading, seriously! (if you have
more than one file)
Nothing but love so far!
Trust me, we'll get to the good stuff soon!
Dependency management
Say, you have a fancy library or want to use
one
Add it to your composer.json "require": { "wpupdatephp/wp-update-php": "~1.0" }
run composer install
Package will be installed vendor/wpupdatephp/ wp-update-php/ Added to autoloader as
well
And one day... (actually, two days ago...)
Dependency hell
You'll have this problem with any dependency manager That includes:
doing it manually
What's wrong?
Plugin A: "require": { "wpupdatephp/wp-update-php": "~1.0" } Plugin B: "require":
{ "wpupdatephp/wp-update-php": "~1.0" } Solution: Install WPupdatePHP version 1.0.0, right?
Sadly, no... Users download zip files, with vendor directory bundled
Bundling is the only way
One plugin bundles 1.1.0, the other 1.0.0 Which one is
used?
The race is on!
Include the file or the autoloader autoloader does class_exists check
first one wins
In the example, 1.0.0 was loaded the plugin bundling 1.1.0,
assumes that version is there Fatal error: Call to undefined method
Now the fun stuff begins!
What can we do to prevent this?
Prefix everything!
Example: Pimple Pimple: namespace Pimple; Danny's prefixed version: namespace ScrollTriggeredBoxes\DI;
It works But where is the developer happiness?
Every update of Pimple... Update all the files Someone make
a SaaS for this...
How would a developer solve this?
Manage the entire site via Composer Including WordPress core Everything
works fine, at least 99% of the time
What if you can't? Want to bundle something with your
plugin What if you can't add your site to Composer?
well...
Add Composer to your site
Creates a master composer.json » loop through wp-content/plugins/ » check
for composer.json file » run wikimedia/composer-merge-plugin » composer install » installed in wp-content/vendor/ At least in theory, this works
In WordPress core? Maybe Requires PHP 5.3+ Fairly resource intensive
The only proper solution
Until that day...
Thank you! @CoenJacobs coenjacobs.me Want to work with me? We're
looking for both frontend & backend developers! Contact me or @radishconcepts
Image credit » Slide 1: https://www.flickr.com/photos/ lizadaly/4373330774/ » Slide 7:
https://www.flickr.com/photos/ diaper/7328032558/ » Slide 13: https://www.flickr.com/ photos/93277085@N08/12715023064/ » Slide 15: https://www.flickr.com/ photos/dandeluca/2720139047/ » Slide 22: https://www.flickr.com/ photos/usnavy/7879793204/
Image credit » Slide 27: https://www.flickr.com/ photos/mdpettitt/4954174041/ » Slide 30:
https://www.flickr.com/ photos/orphanjones/1769903155/ » Slide 36: https://www.flickr.com/ photos/twitteroffice/4524716820/ » Slide 43: https://www.flickr.com/ photos/doug88888/4537134655/