Composer: There's a Module (or Library) for That

Post on 01-Jul-2015

978 views 2 download

description

Reinventing the wheel is always cumbersome. There are already a vast amount of Drupal modules out there. Leveraging PEAR, Packagist, and the PHP community, it's now easier to broaden the functionality spectrum of your Drupal websites even more. This session will introduce ways of integrating Drupal with the Composer package management system in order to take advantage of some of the best PHP libraries out there. http://portland2013.drupal.org/node/3468 http://robloach.github.io/drupalcon2013/

transcript

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