30
Magento 2: Composer for Extensions Distribution Sergii Shymko Senior Software Engineer Magento, an eBay Inc. company

Magento 2 Composer for Extensions Distribution

Embed Size (px)

Citation preview

Page 1: Magento 2 Composer for Extensions Distribution

Magento 2:Composer forExtensions Distribution

Sergii ShymkoSenior Software EngineerMagento, an eBay Inc. company

Page 2: Magento 2 Composer for Extensions Distribution

Introduction

Page 3: Magento 2 Composer for Extensions Distribution

PEAR era…

First Magento CE release!

2008

Page 4: Magento 2 Composer for Extensions Distribution

PEAR

• PHP Extension and Application Repository• System-wide installation• Strict package structure• Bureaucracy• PEAR channel hosting• Dependency issues• Usability issues

Page 5: Magento 2 Composer for Extensions Distribution

Magento 1.x Package Management

• Monolith release package•

– Extension marketplace • Magento Connect Manager:

– Homegrown packaging format– GUI for management

• PEAR for CLI management

Magento 1.x release package

Feature Modules

Magento libraries

3rd party libraries

Design themes/skins

Localizations

Page 6: Magento 2 Composer for Extensions Distribution

PEAR era continues…

Module manager “modman”

2010

Page 7: Magento 2 Composer for Extensions Distribution

Modman for Magento 1.x

• Modman – command line tool• Keeps extensions separately from Magento• Alternative packaging format• CLI for management• Use cases:

– Development– Deployment

Magento 1.x module package

Community module

modman

Page 8: Magento 2 Composer for Extensions Distribution

First Composer release!

First Composer use for Magento 1.xMagento 2 development in progress

2012

Page 9: Magento 2 Composer for Extensions Distribution

Composer Overview

• Composer – dependency manager for PHP• Composer – CLI tool• Dependencies per project• Versioned dependencies• Install, uninstall, update packages• Classes autoloading• Packages repository

packagist.org

Page 10: Magento 2 Composer for Extensions Distribution

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 11: Magento 2 Composer for Extensions Distribution

Why Custom Integration?

Page 12: Magento 2 Composer for Extensions Distribution

Composer Adoption for Magento 1.x

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

• Deployment strategies:– Copy– Move– Symlink

• Modman packages support• Composer packages repository

packages.firegento.com

Page 13: Magento 2 Composer for Extensions Distribution

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 14: Magento 2 Composer for Extensions Distribution

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 15: Magento 2 Composer for Extensions Distribution

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 16: Magento 2 Composer for Extensions Distribution

Composer is de facto standardProjects drop PEAR support

Magento 2 Dev Beta releaseComposer adoption for Magento 2

2014

Page 17: Magento 2 Composer for Extensions Distribution

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

Page 18: Magento 2 Composer for Extensions Distribution

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 19: Magento 2 Composer for Extensions Distribution

Composer Packages in Magento 2

magento/module-catalog

composer.json

Module

magento/theme-frontend-luma

composer.json

Theme

packages.magento.compackagist.org

magento/language-en_us

composer.json

Localization

Page 20: Magento 2 Composer for Extensions Distribution

Composer Packages in Magento 2

magento/zendframework1

composer.json

3rd party library fork

packages.magento.compackagist.org

magento/magento2-base

composer.json

Application skeleton

magento/framework

composer.json

Framework

Page 21: Magento 2 Composer for Extensions Distribution

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 22: Magento 2 Composer for Extensions Distribution

Core Changesfor Composer Adoption

Page 23: Magento 2 Composer for Extensions Distribution

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 24: Magento 2 Composer for Extensions Distribution

Module Version Declaration

Magento 1.x module

config.xml

etc/

Version, not semantic

DB schema version

API version, semantic

Magento 2 module package

module.xml

etc/

composer.json

Page 25: Magento 2 Composer for Extensions Distribution

Module Dependencies Declaration

Magento 1.x module

config.xml

etc/

Magento 2 module package

module.xml

etc/

composer.json

Dependenciesordered, not versioned

Dependenciesnot ordered, versioned

Modules order

Page 27: Magento 2 Composer for Extensions Distribution

Summary of Composer Adoption

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

– PHP version– PHP libraries

Page 29: Magento 2 Composer for Extensions Distribution

Magento 2 Release Schedule

Q4 2014 – Dev Beta Released Dec 17, 2014Q1 2015 – Dev RC Released Mar 23, 2015Q3 2015 – Merchant BetaQ4 2015 – Merchant GA

Page 30: Magento 2 Composer for Extensions Distribution

Resources

• Magento 2– devdocs.magento.com – Developer documentation– github.com/magento/magento2 – CE mainline repository– github.com/magento/magento2-community-edition – CE Composer project– github.com/magento/magento-composer-installer – Composer plugin– packages.magento.com – Composer packages repository

• Magento 1.x– github.com/magento-hackathon/magento-composer-installer – Composer plugin– packages.firegento.com – Composer packages repository

• Composer– getcomposer.org – Composer tool– packagist.org – Composer packages repository– semver.org – Semantic versioning