composer for magento 1.x and magento 2

26

Upload: sergii-shymko

Post on 13-Apr-2017

125 views

Category:

Engineering


1 download

TRANSCRIPT

Page 1: Composer for Magento 1.x and Magento 2
Page 2: Composer for Magento 1.x and Magento 2

Composer for Magento 1.xand Magento 2

Sergii ShymkoSenior Software EngineerMagento, an eBay Inc. company

Page 3: Composer for Magento 1.x and Magento 2

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.

Page 4: Composer for Magento 1.x and Magento 2

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

Page 5: Composer for Magento 1.x and Magento 2

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

Page 6: Composer for Magento 1.x and Magento 2

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

Page 7: Composer for Magento 1.x and Magento 2

Why Custom Integration?

Page 8: Composer for Magento 1.x and Magento 2

Magento is Not Aware of Composer Files

app/magento_project/

composer.json

code/

etc/design/

vendor/

index.php

autoload.php O_o

Page 9: Composer for Magento 1.x and Magento 2

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

Page 10: Composer for Magento 1.x and Magento 2

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

Page 11: Composer for Magento 1.x and Magento 2

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

Page 12: Composer for Magento 1.x and Magento 2

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

Page 13: Composer for Magento 1.x and Magento 2

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>/

Page 14: Composer for Magento 1.x and Magento 2

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//

Page 15: Composer for Magento 1.x and Magento 2

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

Page 16: Composer for Magento 1.x and Magento 2

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

Page 17: Composer for Magento 1.x and Magento 2

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/

Page 18: Composer for Magento 1.x and Magento 2

Core Changesfor Composer Adoption

Page 19: Composer for Magento 1.x and Magento 2

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

Page 20: Composer for Magento 1.x and Magento 2

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

Page 21: Composer for Magento 1.x and Magento 2

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

Page 22: Composer for Magento 1.x and Magento 2

Magento 2 Repositories

• Source code of Community Editiongithub.com/magento/magento2

• Composer project for Community Editiongithub.com/magento/magento2-community-edition

Page 23: Composer for Magento 1.x and Magento 2

Summary of Composer Adoption

• Granular core packages• Semantic versioning• Versioned dependencies• Theme dependencies• Locale dependencies• Validation of environment

– PHP version– PHP libraries

Page 24: Composer for Magento 1.x and Magento 2

Thank You!

Q & ASergii [email protected]

Page 25: Composer for Magento 1.x and Magento 2

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

Page 26: Composer for Magento 1.x and Magento 2

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