Composer for Magento 1.x and Magento 2

Preview:

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

Thank You!

Q & ASergii Shymkosshymko@ebay.com

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

Recommended