composer in magento

22
#mm15de @SergiiShymko Senior Software Engineer Magento, an eBay Inc. company Composer for Magento 1.x and Magento 2

Upload: sergii-shymko

Post on 16-Apr-2017

52 views

Category:

Engineering


0 download

TRANSCRIPT

Page 1: Composer in Magento

#mm15de

@SergiiShymkoSenior Software EngineerMagento, an eBay Inc. company

Composer for Magento 1.xand Magento 2

Page 2: Composer in Magento

#mm15de

The Dependency Management Problem

• App consists of many components• Dependencies between components• Optional components• Compatibility of components• Unique components per project• Components management:

– Install– Uninstall– Update

Page 3: Composer in Magento

#mm15de

Composer Overview

• Composer – dependency manager for PHP– Resolves dependencies– Downloads dependencies– Assembles project’s codebase

• Dependencies per project• Versioned dependencies• Install, uninstall, update packages• Packages repository

packagist.org• Classes autoloading

Page 4: Composer in Magento

#mm15de

Composer Basic Usage

1. Declare project dependenciescomposer.json

2. Install dependenciesphp composer.phar install

3. Autoload dependenciesrequire 'vendor/autoload.php';

vendor/

autoload.php

Zend/……

my_project/

composer.json

Page 5: Composer in Magento

#mm15de#mm15de

Why Custom Integration?

Page 6: Composer in Magento

#mm15de

Magento is Not Aware of Composer Files

app/magento_project/

composer.json

code/

etc/design/

vendor/

index.php

autoload.php O_o

Page 7: Composer in Magento

#mm15de

Composer Adoption for Magento 1.x

• Composer plugin for Magento 1.xmagento-hackathon/magento-composer-installer

• Put files in Magento directories• Deployment strategies:

– Copy– Move– Symlink

• Modman packages support• Composer packages repository

packages.firegento.com

Magento 1.x module package

Community module

modman

Page 8: Composer in Magento

#mm15de

Magento 1.x Composer Package Example

{ "name": "aoepeople/Aoe_Scheduler", "type": "magento-module", "description": "Magento Cron Scheduler", "require": { "magento-hackathon/magento-composer-installer": "*" }}

composer.json

Page 9: Composer in Magento

#mm15de

Magento 1.x Composer Project Example

{ "require": { "magento/core": "1.9.0.1", "aoepeople/Aoe_Scheduler": "*", "magento-hackathon/magento-composer-installer": "*" }, "repositories": [ { "type": "composer", "url": "http://packages.firegento.com" } ]}

composer.json

Page 10: Composer in Magento

#mm15de

Composer Adoption Obstacles in 1.x

• Monolith CE Composer package• Files not in one directory:

– Module files– Theme & skin files

• Versioning:– Not strict release version– No module API version– No theme version– No locale version

magento/core 1.9.0.1

Feature Modules

Magento libraries

3rd party libraries

Design themes/skins

Localizations

composer.json

Page 11: Composer in Magento

#mm15de

Composer Adoption in Magento 2

• Prerequisites:– Self-contained modules

– Self-contained themes

• Forked Composer plugin for 1.xmagento/magento-composer-installer

• Monolith Granular core packagespackages.magento.com

app/code/<Vendor>/<Module>/

app/design/<area>/<Vendor>/<theme>/

Page 12: Composer in Magento

#mm15de

Composer Package Types in Magento 2

• Package type defines files destination• Implemented by the Composer plugin• Custom package types:

magento2-modulemagento2-thememagento2-languagemagento2-librarymagento2-component

app/code/app/design/app/i18n/lib/internal//

Page 13: Composer in Magento

#mm15de

Composer Packages in Magento 2

magento/module-catalog

composer.json

Module

magento/theme-frontend-luma

composer.json

Theme

magento/language-en_us

composer.json

Localizationpackages.magento.com

packagist.org

Page 14: Composer in Magento

#mm15de

Composer Packages in Magento 2

magento/zendframework1

composer.json

3rd party library fork

magento/magento2-base

composer.json

Application skeleton

magento/framework

composer.json

Frameworkpackages.magento.com

packagist.org

Page 15: Composer in Magento

#mm15de

Magento 2 Module Package Example

{ "name": "magento/module-catalog", "require": { "php": "~5.5.0|~5.6.0", "magento/module-store": "0.74.0-beta1", "magento/framework": "0.74.0-beta1", "magento/magento-composer-installer": "*" }, "type": "magento2-module", "version": "0.74.0-beta1", "extra": { "map": [ ["*", "Magento/Catalog"] ] }}

composer.json

app/code/Magento/Catalog/

Page 16: Composer in Magento

#mm15de#mm15de

Core Changesfor Composer Adoption

Page 17: Composer in Magento

#mm15de

Module Versioning in Magento 2

• Composer promotes semantic versioningsemver.org

• Adoption of Semantic Version 2.0.0<major>.<minor>.<patch>[-<suffix>]

<major> – Incompatible API changes<minor> – Add functionality in BC manner<patch> – BC bug fixes<suffix> – Stability

Page 18: Composer in Magento

#mm15de

Module Version Declaration

Magento 1.x

config.xml

app/code/<pool>/<Namespace>/<Module>/

etc/

Magento 2

module.xml

app/code/<Vendor>/<Module>/

etc/

composer.json

Version, not semantic

DB schema version

API version, semantic

Page 19: Composer in Magento

#mm15de

Module Dependencies Declaration

Magento 1.x

<Namespace>_<Module>.xml

app/etc/

modules/

Magento 2

module.xml

app/code/<Vendor>/<Module>/

etc/

composer.json

Dependenciesordered, not versioned

Modules sort order

Dependenciesnot ordered, versioned

Page 20: Composer in Magento

#mm15de

Magento 2 Repositories

• Source code of Community Editiongithub.com/magento/magento2

• Composer project (composer.json) for Community Editiongithub.com/magento/magento2-community-edition

Page 21: Composer in Magento

#mm15de

Summary of Composer Adoption

• Granular core packages• Semantic versioning• Versioned dependencies• Theme dependencies• Locale dependencies• Validation of environment

– PHP version– PHP libraries

Page 22: Composer in Magento

#mm15de

Thank You!Q & A@SergiiShymko

[email protected]@shymko.net