An Introduction to PHP Dependency Management With Composer
Upcoming SlideShare
Loading in...5
×
 

An Introduction to PHP Dependency Management With Composer

on

  • 2,848 views

Bradley Jacob's talk from WordCamp Boston 2013

Bradley Jacob's talk from WordCamp Boston 2013

Statistics

Views

Total Views
2,848
Views on SlideShare
2,838
Embed Views
10

Actions

Likes
0
Downloads
3
Comments
0

1 Embed 10

https://twitter.com 10

Accessibility

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

An Introduction to PHP Dependency Management With Composer An Introduction to PHP Dependency Management With Composer Presentation Transcript

  • Composer Dependency Management in PHP Presentation by: Bradley Jacobs / @crazyjaco @crazyjaco
  • Some assumptions WordPress directory structure JSON Working with multiple WordPress sites
  • Talking Points Goals What is Dependency Management Introduction to Composer The composer.json file The composer.lock file Auto-loading Package Repositories Using Composer with WordPress Wrap up Demo
  • TLDR; Getting to a better workflow through Composer Goal: Rapidly create a WordPress server setup that can be replicated quickly and consistently
  • WordPress Skeleton https://github.com/markjaquith/WordPress-Skeleton . w/ /p .w/pamn /pw-di/ .w/pcnet /pw-otn/ .w/picue/ /pw-nlds . w-otn/ /pcnet .idxhm /ne.tl .w-ofgpp /pcni.h
  • Dependency/Package Management What is a package? A package is just a bunch of files in a folder Dependencies are a type of package.
  • Why Package/Dependency Management? Modern day web pages are rarely self-contained. Frameworks Libraries Scripts
  • Dependency Management vs Package Management
  • Introducing Composer http://getcomposer.org
  • Demo 1 - PHPUnit { } " ae: " rz j c/ hu i- e t, nm" cayaoppntts" " ecito" " ts o uigcmoe wt ppnt, dsrpin: A et f sn opsr ih hui" " ies" "rpitr" lcne: poreay, " eur" { rqie: "hui/hui"".." ppntppnt: 37* }
  • Installation Mac/Linux $cr -Shts/gtopsrogisalr |pp ul s tp:/ecmoe.r/ntle h $m cmoe.hr/s/oa/i/opsr v opsrpa urlclbncmoe Windows: Download and run the Composer-Setup.exe
  • composer.json Schema Documentation File acts as both a consumer and provider
  • { " ae: " rd e /y ol rj c " n m" ba ly mc o po et, " ec it o" " hs p oe td e co s uf, d s rp in : Ti r jc os ol t f" " ew rs: [w rc m" " ot n,"o l ] k y od" "o da p , b s o" c o" , " oe ae: " t p/ gt u. o /r zj c/ yo l rj c" h m pg" ht :/ i hb cm ca ya o mc op oe t, " ye: " ir r " t p" lb ay, " ie s" " I" l c ne : M T, " uh r" [ a t os : { " ae : "r de J cb " nm " Ba l y a o s, " mi " "j c b@ op ic cm , ea l: b ao so m hn .o " " oe a e: "t p/ o mh n. o" hm pg " h t: /o pi cc m } ] , " eo io is: r p st re"{ " ye : "o ps r , tp " cm o e" " r " " tp / cs o- eo og ul : ht :/ ut m rp .r " } , " eu r" { r q ie : "op /r m wr " ". " om hf ae ok : 32 , "ic ma y ai lb ay : "4 0 bg op n/ p- i rr " >. " } , " eu r- e" { r q ie dv : "ut mr p /n tt se " ". ." cs o- eo ui - et r: 2 3* , "og rl g e " " .. " lg e/ og r : 1 7* , "eu /o l " " 2 0 db gt os : ~. " } , " ug s" { s g et : "ol op n /x es o " " lo e tn in t te c r p or m co cm ay et n in : Al w x e so o h o e rg a" } }
  • { " ae:"rde/yolrjc" nm" balymcopoet, " ecito" "hspoetde co suf, dsrpin: Ti rjc os ol tf" " ewrs:[wrcm" "otn,"ol] kyod" "odap, bso" co", " oeae:"tp/gtu.o/rzjc/yolrjc" hmpg" ht:/ihbcmcayaomcopoet, " ye:"irr" tp" lbay, " ies" "I" lcne: MT, " uhr" [ atos: { "ae:"rde Jcb" nm" Baly aos, "mi " "jcb@opiccm, eal: baosomhn.o" "oeae:"tp/omhn.o" hmpg " ht:/opiccm } ] , " eoiois: rpstre"{ "ye:"opsr, tp" cmoe" "r" "tp/cso-eoog ul : ht:/utmrp.r" } , " eur" { rqie:
  • Composer.lock
  • Autoloading *** All dependencies are loaded into the '/vendor' folder *** rqie'edratla.h' eur vno/uoodpp; This one line gives you access to all of the classes in your dependencies.
  • Package Repositories Where do we find and get the packages for composer to install?
  • Packagist.org Packagist.org
  • Using Composer w/ WordPress custom installers, WPackagist.org
  • WPackagist.org
  • Custom Installers It will be necessary for additional actions on occasion, like installing something outside the /vendor folder. http://composer.github.io/installers/ - An installer for packages that need special installation based on package type
  • Hosted Plugin { " ae: " op i cc op ui " n m" om hn /o l lg n, " ye: " od r s- lg n, t p" wr pe sp u i" " eu r" { r q ie : "op sr i sa lr " "" cm oe /n tl e s: * } } Your Project { " ae: " rz j c/ od rs - op sr ts " n m" ca ya ow r pe sc mo e- e t, " ec it o" " t s o u i gc mo e wt W rP es, d s rp in : A e t f sn o ps r ih o dr s " " ie s" " rp it r " l c ne : p o re ay , " eo io is: [ r p st re" { " ye : "o ps r , tp " cm o e" " r " " tp / wa kg s. r" ul : ht :/ pc a it og } ] , " eu r" { r q ie : "pc ai t yt ao hr r lt dp ss pu i "" " wa kg s/ e- n te -e ae -o t -l gn :* , "pc ai t w- ue -a h "" " wa kg s/ ps p rc ce :* , "pc ai t jt ak :* wa kg s/ ep c "" " } , " eu r- e" { r q ie dv : "pc ai t dv lp r :* wa kg s/ ee o e """ } }
  • Demo 2 Using the Custom Installer for WordPress Plugins { " ae: " rz j c/ od rs - op sr ts " n m" ca ya ow r pe sc mo e- e t, " ec it o" " t s o u i gc mo e wt W rP es, d s rp in : A e t f sn o ps r ih o dr s " " ie s" " rp it r " l c ne : p o re ay , " eo io is: [ r p st re" { " ye : "o ps r , tp " cm o e" " r " " tp / wa kg s. r" ul : ht :/ pc a it og } ] , " eu r" { r q ie : "pc ai t yt ao hr r lt dp ss pu i "" " wa kg s/ e- n te -e ae -o t -l gn :* , "pc ai t w- ue -a h "" " wa kg s/ ps p rc ce :* , "pc ai t jt ak :* wa kg s/ ep c "" " } , " eu r- e" { r q ie dv : "pc ai t dv lp r :* wa kg s/ ee o e """ } }
  • Final Demo - WordPress Endgame Goal: Generate the WordPress Skeleton . w/ /p .w/pamn /pw-di/ .w/pcnet /pw-otn/ .w/picue/ /pw-nlds . w-otn/ /pcnet .idxhm /ne.tl .w-ofgpp /pcni.h
  • { " ae: " rz j c/ pf l- e o, nm" cayaow-uldm" " ecito" "ulWrPesIsalDm" dsrpin: Fl odrs ntl eo, " ewrs:[WrPes,"hm" "lgn,"op" , kyod" "odrs" tee, pui" Omh] " oeae:"tp/omhn.o/, hmpg" ht:/opiccm" " ye:"rjc" tp" poet, " ies" "rpitr" lcne: poreay, " uhr" [ atos: { "ae:"rde Jcb -Omh, nm" Baly aos op" "mi " "jcb@opiccm, eal: baosomhn.o" "oeae:"tp/omhn.o" hmpg " ht:/opiccm } ] , " eoiois:[ rpstre" { "ye:"opsr, tp" cmoe" "r" "tp/wakgs.r" ul : ht:/pcaitog } , {
  • Where do we go from here Integration of Source Control (SVN, Git, Hg) Pre/Post install hooks WP-CLI commands
  • Wrapping Up Goals What is Dependency Management Introduction to Composer The composer.json file The composer.lock file Auto-loading Package Repositories Using Composer with WordPress Wrap up Demo
  • Resources: Composer Documentation http://composer.rarst.net/ Trac ticket #23912 - Add composer support to WordPress
  • Thank You! @crazyjaco | github.com/crazyjaco