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
250
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
48
State of WordPress and eCommerce (WordPress meetup Nijmegen september 2015)
coenjacobs
0
360
Other Decks in Programming
See All in Programming
AI時代の認知負荷との向き合い方
optfit
0
160
疑似コードによるプロンプト記述、どのくらい正確に実行される?
kokuyouwind
0
390
CSC307 Lecture 01
javiergs
PRO
0
690
QAフローを最適化し、品質水準を満たしながらリリースまでの期間を最短化する #RSGT2026
shibayu36
2
4.4k
副作用をどこに置くか問題:オブジェクト指向で整理する設計判断ツリー
koxya
1
610
日本だけで解禁されているアプリ起動の方法
ryunakayama
0
180
組織で育むオブザーバビリティ
ryota_hnk
0
180
CSC307 Lecture 03
javiergs
PRO
1
490
CSC307 Lecture 05
javiergs
PRO
0
500
Oxlint JS plugins
kazupon
1
1k
CSC307 Lecture 10
javiergs
PRO
1
660
AI時代のキャリアプラン「技術の引力」からの脱出と「問い」へのいざない / tech-gravity
minodriven
21
7.4k
Featured
See All Featured
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
1
100
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.9k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
0
140
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
1
130
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
130
How to make the Groovebox
asonas
2
1.9k
Test your architecture with Archunit
thirion
1
2.2k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
120
What's in a price? How to price your products and services
michaelherold
247
13k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
750
Discover your Explorer Soul
emna__ayadi
2
1.1k
How to Ace a Technical Interview
jacobian
281
24k
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/