sergii shymko: magento 2: composer for extensions distribution
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
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
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
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/
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