sergii shymko: magento 2: composer for extensions distribution

30

Upload: meet-magento-italy

Post on 14-Jul-2015

623 views

Category:

Presentations & Public Speaking


1 download

TRANSCRIPT

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

No Dependency Manager / PEAR

First Magento CE Release!

2008

What’s Up with PEAR?

• 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

• Magento Connect Manager:

– Homegrown packaging format

– GUI for management

• PEAR for CLI management

• Vague module versioning

• Not versioned dependencies

Magento 1.xrelease package

Feature Modules

Magento libraries

3rd party libraries

Design themes/skins

Localizations

Still No Dependency Manager

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.xmodule package

Community module

modman

First Composer Release!

First Composer Use for Magento 1.x

Magento 2 Development in Progress

2012

Composer Overview

• Composer – dependency manager for PHP

• Composer – CLI tool

• Dependencies per project

• Versioned dependencies

• Package management:

– Install

– Uninstall

– Update

• Classes autoloading

Composer Basic Usage

1. Declaring project dependenciescomposer.json

1. Installing dependenciesphp composer.phar install

1. Autoloading dependenciesrequire 'vendor/autoload.php';

vendor/

autoload.php

Zend/…

my_project/

composer.json

Installation via Composer

1. Read composer.json

1. Read required packages

2. Read repositories

3. Append packagist.org to repositories

2. For each package:

1. Download from repository

2. Install dependencies recursively

3. Register plugin, if API implemented

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

• No strict versioning

• No module API version

• No theme version

• No locale version

• Files not in one directory:

– Module files

– Theme & skin files

magento/core1.9.0.1

Feature Modules

Magento libraries

3rd party libraries

Design themes/skins

Localizations

composer.json

Composer is De Facto Standard

Projects Drop PEAR Support

Magento 2 Dev Beta Release

Composer Adoption for Magento 2

2014

Composer Adoption in Magento 2

• Prerequisites:

– Self-contained modules

– Self-contained themes

• Monolith Granular core packages

• Fork of the Composer plugin for 1.xmagento/magento-composer-installer

• Composer packages repository

packages.magento.com

Composer Package Types in Magento 2

• Package type defines files destination

• Implemented by the Composer plugin

• Custom package types:magento2-module

magento2-theme

magento2-language

magento2-library

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

monolog/monolog

composer.json

3rd party library

magento/language-it_it

composer.json

Localization

Composer Packages in Magento 2

magento/zendframework1

composer.json

3rd party library fork

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.42.0-beta9",

"magento/framework": "0.42.0-beta9",

"magento/magento-composer-installer": "*"

},

"type": "magento2-module",

"version": "0.42.0-beta9",

"extra": {

"map": [

["*", "Magento/Catalog"]

]

}

}

composer.json

app/code/

Magento/Catalog/

Core Changesfor Composer Adoption

Module Versioning in Magento 2

• Composer requires 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

Magento 2 Repositories

github.com

magento/magento2 – CE mainline

magento/magento2-community-edition – CE Composer project

magento/magento-composer-installer – Composer plugin

magento/zf1 – Fork of Zend Framework 1.x

Results of Composer Adoption

• Granular core packages

• Semantic versioning

• Versioned dependencies

• Theme dependencies

• Locale dependencies

• Validation of environment

– PHP version

– PHP libraries

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

Q: When is Magento 2 Release?

A: Magento 2 release schedule:

1. Q4 2014 – Dev Beta Released Dec 17, 2014

2. Q1 2015 – Dev RC

3. Q3 2015 – Merchant Beta

4. Q4 2015 – Merchant GA

Thank You!

Q & ASergii Shymko

[email protected]