magento 2 composer for extensions distribution
TRANSCRIPT
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
Magento 2 Repositories
github.commagento/magento2 – CE mainlinemagento/magento2-community-edition – CE Composer projectmagento/magento-composer-installer – Composer pluginmagento/zf1 – Fork of Zend Framework 1.x
Summary of Composer Adoption
• Granular core packages• Semantic versioning• Versioned dependencies• Theme dependencies• Locale dependencies• Validation of environment
– PHP version– PHP libraries
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