Download - Composer in Magento
#mm15de
@SergiiShymkoSenior Software EngineerMagento, an eBay Inc. company
Composer for Magento 1.xand Magento 2
#mm15de
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
#mm15de
Composer Overview
• Composer – dependency manager for PHP– Resolves dependencies– Downloads dependencies– Assembles project’s codebase
• Dependencies per project• Versioned dependencies• Install, uninstall, update packages• Packages repository
packagist.org• Classes autoloading
#mm15de
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
#mm15de#mm15de
Why Custom Integration?
#mm15de
Magento is Not Aware of Composer Files
app/magento_project/
composer.json
code/
etc/design/
vendor/
index.php
autoload.php O_o
#mm15de
Composer Adoption for Magento 1.x
• Composer plugin for Magento 1.xmagento-hackathon/magento-composer-installer
• Put files in Magento directories• Deployment strategies:
– Copy– Move– Symlink
• Modman packages support• Composer packages repository
packages.firegento.com
Magento 1.x module package
Community module
modman
#mm15de
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
#mm15de
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
#mm15de
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
#mm15de
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
app/code/<Vendor>/<Module>/
app/design/<area>/<Vendor>/<theme>/
#mm15de
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//
#mm15de
Composer Packages in Magento 2
magento/module-catalog
composer.json
Module
magento/theme-frontend-luma
composer.json
Theme
magento/language-en_us
composer.json
Localizationpackages.magento.com
packagist.org
#mm15de
Composer Packages in Magento 2
magento/zendframework1
composer.json
3rd party library fork
magento/magento2-base
composer.json
Application skeleton
magento/framework
composer.json
Frameworkpackages.magento.com
packagist.org
#mm15de
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/
#mm15de#mm15de
Core Changesfor Composer Adoption
#mm15de
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
#mm15de
Module Version Declaration
Magento 1.x
config.xml
app/code/<pool>/<Namespace>/<Module>/
etc/
Magento 2
module.xml
app/code/<Vendor>/<Module>/
etc/
composer.json
Version, not semantic
DB schema version
API version, semantic
#mm15de
Module Dependencies Declaration
Magento 1.x
<Namespace>_<Module>.xml
app/etc/
modules/
Magento 2
module.xml
app/code/<Vendor>/<Module>/
etc/
composer.json
Dependenciesordered, not versioned
Modules sort order
Dependenciesnot ordered, versioned
#mm15de
Magento 2 Repositories
• Source code of Community Editiongithub.com/magento/magento2
• Composer project (composer.json) for Community Editiongithub.com/magento/magento2-community-edition
#mm15de
Summary of Composer Adoption
• Granular core packages• Semantic versioning• Versioned dependencies• Theme dependencies• Locale dependencies• Validation of environment
– PHP version– PHP libraries