Magento 2 Composer for Extensions Distribution Sergii Shymko
Magento 2: Composer for Extensions Distribution Sergii Shymko Senior Software Engineer Magento, an e. Bay Inc. company
Introduction
PEAR era… 2008 First Magento CE release!
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 Design themes/skins Magento libraries 3 rd party libraries Localizations
PEAR era continues… 2010 Module manager “modman”
Modman for Magento 1. x • • • Modman – command line tool Keeps extensions separately from Magento Alternative packaging format Magento 1. x CLI for management module package Use cases: Community module – Development – Deployment modman
First Composer release! 2012 First Composer use for Magento 1. x Magento 2 development in progress
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 dependencies composer. json my_project/ vendor/ Zend/… 2. Install dependencies php composer. phar install … autoload. php composer. json 3. Autoload dependencies require 'vendor/autoload. php';
Why Custom Integration?
Composer Adoption for Magento 1. x • Composer plugin for Magento 1. x magento-hackathon/magento-composer-installer • Deployment strategies: – Copy – Move – Symlink • Modman packages support • Composer packages repository packages. firegento. com
Magento 1. x Composer Package Example composer. json { "name": "aoepeople/Aoe_Scheduler", "type": "magento-module", "description": "Magento Cron Scheduler", "require": { "magento-hackathon/magento-composer-installer": "*" } }
Magento 1. x Composer Project Example composer. json { "require": { "magento/core": "1. 9. 0. 1", "aoepeople/Aoe_Scheduler": "*", "magento-hackathon/magento-composer-installer": "*" }, "repositories": [ { "type": "composer", "url": "http: //packages. firegento. com" } ] }
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 Design themes/skins Magento libraries 3 rd party libraries Localizations composer. json
Composer is de facto standard Projects drop PEAR support 2014 Magento 2 Dev Beta release Composer adoption for Magento 2
Composer Adoption in Magento 2 • Prerequisites: – Self-contained modules – Self-contained themes • Forked Composer plugin for 1. x magento/magento-composer-installer • Monolith Granular core packages. magento. com
Composer Package Types in Magento 2 • Package type defines files destination • Implemented by the Composer plugin • Custom package types: magento 2 -module magento 2 -theme magento 2 -language magento 2 -library magento 2 -component app/code/ app/design/ app/i 18 n/ lib/internal/ /
Composer Packages in Magento 2 magento/module-catalog magento/theme-frontend-luma Module Theme composer. json magento/language-en_us Localization composer. json packages. magen to. com packagist. org
Composer Packages in Magento 2 magento/magento 2 -base Application skeleton composer. json magento/framework Framework composer. json packages. magen to. com packagist. org magento/zendframework 1 3 rd party library fork composer. json
Magento 2 Module Package Example composer. json { } "name": "magento/module-catalog", "require": { "php": "~5. 5. 0|~5. 6. 0", "magento/module-store": "0. 74. 0 -beta 1", "magento/framework": "0. 74. 0 -beta 1", "magento/magento-composer-installer": "*" }, "type": "magento 2 -module", "version": "0. 74. 0 -beta 1", app/code/ "extra": { "map": [ Magento/Catalog/ ["*", "Magento/Catalog"] ] }
Core Changes for Composer Adoption
Module Versioning in Magento 2 • Composer promotes semantic versioning semver. 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 etc/ config. xml Version, not semantic Magento 2 module package etc/ module. xml composer. json DB schema version API version, semantic
Module Dependencies Declaration Magento 1. x module etc/ config. xml Dependencies ordered, not versioned Magento 2 module package etc/ module. xml composer. json Modules order Dependencies not ordered, versioned
Magento 2 Repositories github. com magento/magento 2 – CE mainline magento/magento 2 -community-edition – CE Composer project magento/magento-composer-installer – Composer plugin magento/zf 1 – 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
Thank You! Q&A Sergii Shymko sergey@shymko. net
Magento 2 Release Schedule Q 4 2014 – Dev Beta Released Dec 17, 2014 Q 1 2015 – Dev RC Released Mar 23, 2015 Q 3 2015 – Merchant Beta Q 4 2015 – Merchant GA
Resources • Magento 2 – devdocs. magento. com – Developer documentation – github. com/magento 2 – CE mainline repository – github. com/magento 2 -community-edition – CE Composer project – github. com/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
- Slides: 30