Upload
sergii-shymko
View
142
Download
1
Embed Size (px)
Citation preview
Composer for Magento 1.xand Magento 2
Sergii ShymkoSenior Software EngineerMagento, an eBay Inc. company
Legal Disclaimer
Copyright © 2015 Magento, Inc. All Rights Reserved.
Magento®, eBay Enterprise™ and their respective logos are trademarks, service marks, registered trademarks, or registered service marks of eBay, Inc. or its subsidiaries. Other trademarks or service marks contained in this presentation are the property of the respective companies with which they are associated.
This presentation is for informational and discussion purposes only and should not be construed as a commitment of Magento, Inc. or eBay Enterprise (“eBay Enterprise”) or of any of their subsidiaries or affiliates. While we attempt to ensure the accuracy, completeness and adequacy of this presentation, neither Magento, Inc., eBay Enterprise nor any of their subsidiaries or affiliates are responsible for any errors or will be liable for the use of, or reliance upon, this presentation or any of the information contained in it. Unauthorized use, disclosure or dissemination of this information is expressly prohibited.
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
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
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?
Magento is Not Aware of Composer Files
app/magento_project/
composer.json
code/
etc/design/
vendor/
index.php
autoload.php O_o
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
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 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>/
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
magento/language-en_us
composer.json
Localizationpackages.magento.com
packagist.org
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
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
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
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
Magento 2 Repositories
• Source code of Community Editiongithub.com/magento/magento2
• Composer project for Community Editiongithub.com/magento/magento2-community-edition
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