Magento 2 Composer for Extensions Distribution

Preview:

Citation preview

Magento 2:Composer forExtensions Distribution

Sergii ShymkoSenior Software EngineerMagento, an eBay Inc. company

Introduction

PEAR era…

First Magento CE release!

2008

PEAR

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

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

PEAR era continues…

Module manager “modman”

2010

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

First Composer release!

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

2012

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

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

Why Custom Integration?

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

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

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

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

Composer is de facto standardProjects drop PEAR support

Magento 2 Dev Beta releaseComposer adoption for Magento 2

2014

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

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//

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

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

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/

Core Changesfor Composer Adoption

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

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

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

Summary of Composer Adoption

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

– PHP version– PHP libraries

Thank You!

Q & ASergii Shymko

sergey@shymko.net

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

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

Recommended