composer - drupal · composer successfully installed to: composer.phar use it: php composer.phar $...

Post on 27-Jun-2020

25 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

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

top related