COMPOSERTHERE'SAMODULE(ORLIBRARY)FORTHAT!
Presentedby andRobLoach LarryGarfield
DEPENDENCYMANAGEMENTSUCKS
PHPSUCKSATSHARINGHowdoIgeta3rdpartylibrary?HowdoIloaditscode?Doesitdependonanything?WheredoIputthefiles?
SHARINGISHOWOPENSOURCEWORKS
SUCKINGATSHARINGISHOWOPENSOURCEDIES
BUTWE'REDRUPAL!Drupal.org:Greatformodules,nothingelseDuplicateworkelsewhereCodeisnotreusable
3RDPARTYCODEManuallydownloadintoyourmoduleandprayManuallydownloadinto/libraries/andprayManuallysetupextrahook
(...andpray)
"DOITMANUALLYANDPRAY"ISFORLOSERS
WE'REBETTERTHANTHAT,RIGHT?
ALITTLEHISTORY
PEARPHPExtensionandApplicationRepositoryFounded2000onthe"new"PHP4Requiredroottouseproperly(WTF?)ComplexprocessforaddingpackagesEasytogetwrong
SYMFONY2.0&PHPBBInitialalpha,SymfonyLiveParis,February2010PHPBB:We'rerebuildingonit!Symfony2uses3rdpartylibs(Doctrine,Monolog)
DEPENDENCYHELL
WENEEDADEPENDENCYSYSTEM!“It'sdumbtomakeitSymfonyspecific”
—JordiBoggiano
APRIL2011NilsAderman(PHPBB):libzypp->PHP
JordiBoggiano(Monolog):Packagist,lesssuckyfront-endforPEAR
WITHTHEIRPOWERSCOMBINED...ComposerisatoolfordependencymanagementinPHP.Itallowsyoutodeclarethedependentlibrariesyourprojectneedsanditwillinstalltheminyourprojectforyou.
UHH,WHAT?NomoreCopy/PasteoflibrariesResolvesdependenciesEachprojectdefinesitsownrequirementsPerformsbuildtasksLikemodule.infofiles,butforanylibrary
SEPTEMBER2011
1.2.3.4.5.6.
Packagist.orgMonologTwigPirumSwiftmailerPimpleSymfony
—JordiBoggiano
“I'dsayuntilearly2012itwasprettyunusable,yetpeopleusedit.Iguessthat's
howbadlyitwasneeded.”
PACKAGECOUNT
April2013:10,000packages(NotjustSymfony!)
LIBRARIESSomeofthelibrariesavailableviaComposerinclude...
SYMFONYPHPframeworkforwebapplications
http://symfony.com
ZENDFRAMEWORK
PHPframeworkforwebapplicationshttp://framework.zend.com
PHPUNIT
UnittestingsoftwareframeworkforPHPhttp://phpunit.de
GUZZLEHTTPclient&frameworkforbuildingRESTfulwebservice
clientshttp://guzzlephp.org
SOLARIUM
SolrclientlibraryforPHPhttp://solarium-project.org
ELASTICAElasticsearchsearchengine/databaseforPHP
http://elastica.io
MONOLOGLogtofiles,sockets,inboxes,databasesandvariousweb
serviceshttps://github.com/seldaek/monolog
ASSETICJavaScript,stylesheet,andimageassetmanagement
http://github.com/kriswallsmith/assetic
LET'SDOTHIS
COMPOSER.JSONBasemanifestfileforyourproject
{"name":"crell/mypackage","description":"Thispackageprovidessomeawesomeness.","require":{"guzzle/guzzle":"3.4.*"},"autoload":{"psr-0":{"MyName\\MyPackage":"src/"}}}
COMPOSERINSTALLInstallsalldependenciesforyourproject
$curl-sShttps://getcomposer.org/installer|phpAllsettingscorrectforusingComposerDownloading...
Composersuccessfullyinstalledto:composer.pharUseit:phpcomposer.phar$phpcomposer.pharinstall
FILESYSTEM-rw-rw-r--composer.json(yourcomposerfile)-rw-rw-r--composer.lock(generated)drwxrwxr-xsrc/(yourcode)drwxrwxr-xvendor/(everyoneelse'scode)
INDEX.PHPrequire_once__DIR__.'/vendor/autoload.php';
//Everyclassisnowyourstocommand!
//Autoloadondemand!Yourwork:zero.$client=newGuzzle\Http\Client('https://api.github.com');$request=$client->get('/user')->setAuth('user','pass');$response=$request->send();echo$response->getBody();
COMPOSERUPDATEUpdatesallinstalleddependenciestothelatestversion$phpcomposer.pharupdateLoadingcomposerrepositorieswithpackageinformationUpdatingdependencies
MORESCHEMAOPTIONSSchemaDocumentation
{"license":"MIT","require":{"php":">=5.3.10","guzzle/guzzle":"3.4.*"},"require-dev":{"phpunit/phpunit":"3.7.*"},"suggest":{"monolog/monolog":"Advancedloggingpackage"}}
PRIVATEREPOSITORIESSatisallowsyoutohostyourownComposerrepositories{"repositories":[{"type":"composer","url":"http://packages.example.org/"}],"require":{"company/package":"1.2.0","company/package2":"1.5.2","company/package3":"dev-master"}}
github.com/composer/satis
COMPOSERFORDRUPAL
DRUSHCOMPOSERAllowsrunningComposercommandsthroughDrush
$drushdlcomposer-8.x$drushcomposer
drupal.org/project/composer
COMPOSERAUTOLOADAutomaticallyloadsanygeneratedComposerfiles
-JimmyBerry drupal.org/project/composer_autoload
COMPOSERMANAGERBuildsComposerfilesfrommodulecomposer.jsonfiles
-ChrisPliakas drupal.org/project/composer_manager
DRUSHCOMPOSERMANAGERDownloadsandinstallsdependenciesforDrupalmodules$drushdlcomposer_managermonolog$drushencomposer_managermonolog$drushcomposer-managerLoadingcomposerrepositorieswithpackageinformationInstallingdependencies-Installingpsr/log(1.0.0)Downloading:100%
-Installingmonolog/monolog(1.5.0)Downloading:100%
drupal.org/project/composer_manager
COMPOSERINSTALLERSFacilitatesinstallationofDrupalmodules/themes/profiles
github.com/composer/installers
COMPOSERINSTALLERSAddacomposer.jsonfileinyourmodule/themedirectory
Addingthesetoeachmoduleiscumbersomethough,sothereis...
{"name":"dries/mymodule","type":"drupal-module","require":{"composer/installers":"*"}}
github.com/composer/installers
DRUPALPACKAGISTIndexesDrupalthemes/modulesforinstallationusingSatis
-
Stillveryearly
{"repositories":[{"type":"composer","url":"http://drugist.espend.de"}],"require":{"drupal/views":"*"}}
Haehnchen github.com/haehnchen/drupal-packagist
SPRINT:FRIDAYSprintwiththecommunityonFriday.Tasksforeveryskillset.
Mentorsareavailablefornewcontributors.OptionalFridaymorningworkshopwillhelpyousetup
communitytools.Drupaltag: Follow#composer @drupalmentoring
THANKYOUEvaluatethissessionat:
portland2013.drupal.org/node/3468
Top Related