SlideShare a Scribd company logo
Composer vs. Копипаст модулей Битрикса
из проекта в проект
Осотов Михаил
Composer
Composer (getcomposer.org) — менеджер
зависимостей для PHP.
В отличие от PEAR Composer устанавливает
зависимости не глобально для всего сервера, а
локально для конкретного проекта.
Как это работает
1. Есть проект, который зависит от нескольких библиотек.
2. Некоторые из этих библиотек зависят от других библиотек.
3. Вы описываете только те библиотеки, от которых
непосредственно зависит ваш код.
4. Composer находит нужные версии требуемых библиотек,
скачивает их и устанавливает в папку вашего проекта.
Где могут располагаться
зависимости?
• официальный репозиторий packagist.org
• git, mercurial или svn репозиторий
• можно скачать что угодно, лишь бы был url и доступ
Что нужно для начала работы?
• composer.phar
• composer.json
{
"require": {
"php":">=5.3.0",
"phpunit/phpunit":"3.7.*",
"twig/twig":">=1.8,<2.0-dev"
}
}
После установки получаем
• /vendor/
• composer.lock
Но у нас есть проблема!
Composer устанавливает зависимости в /vendor/
Модуль битрикса в /vendor/
никому не нужен!
Что делать?
• composer/installers
• использовать плагин для Composer
Плагин для Composer
• https://getcomposer.org/doc/articles/custom-installers.md -
документация
• https://github.com/osotov/bitrix-composer-module-installer
- живой пример на основе документации
ModuleInstallerPlugin.php
<?php
namespace BitrixComposer;
use ComposerComposer;
use ComposerIOIOInterface;
use ComposerPluginPluginInterface;
class ModuleInstallerPlugin implements PluginInterface {
public function activate(Composer $composer, IOInterface $io)
{
$installer = new ModuleInstaller($io, $composer);
$composer->getInstallationManager()->addInstaller($installer);
}
}
ModuleInstaller.php
class ModuleInstaller extends LibraryInstaller
{
const PACKAGE_TYPE = 'bitrix-module-installer';
public function getPackageBasePath(PackageInterface $package)
{
$extras = $package->getExtra();
if ((array_key_exists('bitrix_module_name', $extras)) && (! empty($extras['bitrix_module_name']))) {
$name = (string) $extras['bitrix_module_name'];
} else {
throw new Exception(
'Unable to install module, composer.json must contain module name declaration like this: ' .
'"extra": { "bitrix_module_name": "somename" } '
);
}
return 'local/modules/' . $name;
}
}
composer.json вашего модуля
{
"name":"bitrix/bitrix_template_module",
"type": "bitrix-module-installer",
"description":"Bitrix custom project template module",
"license": "MIT",
"extra": {
"bitrix_module_name": "CustomProjectModule"
},
"require":{
"php":">=5.3.0",
"osotov/bitrix-module-installer-plugin": ">=1.0.0"
}
}
Небольшой совет
Делайте релизы!
git tag вам в помощь
Что посмотреть?
• getcomposer.org
• http://habrahabr.ru/post/145946/
• https://github.com/composer/installers
Вопросы?
Twitter: @reghancheg
Skype: reghan88
E-mail: oms@htc-cs.com

More Related Content

What's hot

"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
MoscowJS
 
2 Продуктивность работы в IDE; Разработка для Windows 10 Store
2 Продуктивность работы в IDE; Разработка для Windows 10 Store2 Продуктивность работы в IDE; Разработка для Windows 10 Store
2 Продуктивность работы в IDE; Разработка для Windows 10 Store
sandy97
 
1. RAD Studio Tokyo What's new Введение (К.Раннев)
1. RAD Studio Tokyo What's new Введение (К.Раннев)1. RAD Studio Tokyo What's new Введение (К.Раннев)
1. RAD Studio Tokyo What's new Введение (К.Раннев)
sandy97
 
RDSDataSource: Автогенерация документации для SDK
RDSDataSource: Автогенерация документации для SDKRDSDataSource: Автогенерация документации для SDK
RDSDataSource: Автогенерация документации для SDK
RAMBLER&Co
 
Solit 2014, Непрерывная интеграция сложного проекта. Кто все сломал?, Русаков...
Solit 2014, Непрерывная интеграция сложного проекта. Кто все сломал?, Русаков...Solit 2014, Непрерывная интеграция сложного проекта. Кто все сломал?, Русаков...
Solit 2014, Непрерывная интеграция сложного проекта. Кто все сломал?, Русаков...
solit
 
базовые принципы работы с Git
базовые принципы работы с Gitбазовые принципы работы с Git
базовые принципы работы с Git
DressTester
 
Максим Пугачев
Максим ПугачевМаксим Пугачев
Максим Пугачев
CodeFest
 
RDSDataSource: App Thinning
RDSDataSource: App ThinningRDSDataSource: App Thinning
RDSDataSource: App Thinning
RAMBLER&Co
 
Сергей Яковлев "Phalcon 2 - стабилизация и производительность"
Сергей Яковлев "Phalcon 2 - стабилизация и производительность"Сергей Яковлев "Phalcon 2 - стабилизация и производительность"
Сергей Яковлев "Phalcon 2 - стабилизация и производительность"
Fwdays
 
Triggermesh - FaaS платформа на Kubernetes
Triggermesh - FaaS платформа на KubernetesTriggermesh - FaaS платформа на Kubernetes
Triggermesh - FaaS платформа на Kubernetes
Mad Devs
 
"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov
"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov
"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov
Fwdays
 
станислав мехоношин «инфраструктура для разработки в один клик, или Vagrant д...
станислав мехоношин «инфраструктура для разработки в один клик, или Vagrant д...станислав мехоношин «инфраструктура для разработки в один клик, или Vagrant д...
станислав мехоношин «инфраструктура для разработки в один клик, или Vagrant д...DataArt
 
Cистемы автоматической сборки проектов (Полина Фоминых)
Cистемы автоматической сборки проектов (Полина Фоминых)Cистемы автоматической сборки проектов (Полина Фоминых)
Cистемы автоматической сборки проектов (Полина Фоминых)
Кафедра высокопроизводительных компьютерных технологий ИМКН УрФУ
 
selenium stack in python
selenium stack in pythonselenium stack in python
selenium stack in python
COMAQA.BY
 
Приемы Сontinuous Integration при разработке приложений на Caché
Приемы Сontinuous Integration при разработке приложений на CachéПриемы Сontinuous Integration при разработке приложений на Caché
Приемы Сontinuous Integration при разработке приложений на Caché
InterSystems CEE
 
Caché github continuous intergration
Caché github continuous intergrationCaché github continuous intergration
Caché github continuous intergration
InterSystems
 
системы сборок проектов
системы сборок проектовсистемы сборок проектов
системы сборок проектов
Romero78
 
Готовим Docker для Автоматизации Тестирования
Готовим Docker для Автоматизации ТестированияГотовим Docker для Автоматизации Тестирования
Готовим Docker для Автоматизации Тестирования
COMAQA.BY
 
Codeception + Docker + Robo и что из этого вышло
Codeception + Docker + Robo и что из этого вышлоCodeception + Docker + Robo и что из этого вышло
Codeception + Docker + Robo и что из этого вышло
COMAQA.BY
 

What's hot (20)

"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
 
2 Продуктивность работы в IDE; Разработка для Windows 10 Store
2 Продуктивность работы в IDE; Разработка для Windows 10 Store2 Продуктивность работы в IDE; Разработка для Windows 10 Store
2 Продуктивность работы в IDE; Разработка для Windows 10 Store
 
1. RAD Studio Tokyo What's new Введение (К.Раннев)
1. RAD Studio Tokyo What's new Введение (К.Раннев)1. RAD Studio Tokyo What's new Введение (К.Раннев)
1. RAD Studio Tokyo What's new Введение (К.Раннев)
 
RDSDataSource: Автогенерация документации для SDK
RDSDataSource: Автогенерация документации для SDKRDSDataSource: Автогенерация документации для SDK
RDSDataSource: Автогенерация документации для SDK
 
Solit 2014, Непрерывная интеграция сложного проекта. Кто все сломал?, Русаков...
Solit 2014, Непрерывная интеграция сложного проекта. Кто все сломал?, Русаков...Solit 2014, Непрерывная интеграция сложного проекта. Кто все сломал?, Русаков...
Solit 2014, Непрерывная интеграция сложного проекта. Кто все сломал?, Русаков...
 
базовые принципы работы с Git
базовые принципы работы с Gitбазовые принципы работы с Git
базовые принципы работы с Git
 
Максим Пугачев
Максим ПугачевМаксим Пугачев
Максим Пугачев
 
RDSDataSource: App Thinning
RDSDataSource: App ThinningRDSDataSource: App Thinning
RDSDataSource: App Thinning
 
Непрерывная интеграция (Марина Пестова)
Непрерывная интеграция (Марина Пестова)Непрерывная интеграция (Марина Пестова)
Непрерывная интеграция (Марина Пестова)
 
Сергей Яковлев "Phalcon 2 - стабилизация и производительность"
Сергей Яковлев "Phalcon 2 - стабилизация и производительность"Сергей Яковлев "Phalcon 2 - стабилизация и производительность"
Сергей Яковлев "Phalcon 2 - стабилизация и производительность"
 
Triggermesh - FaaS платформа на Kubernetes
Triggermesh - FaaS платформа на KubernetesTriggermesh - FaaS платформа на Kubernetes
Triggermesh - FaaS платформа на Kubernetes
 
"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov
"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov
"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov
 
станислав мехоношин «инфраструктура для разработки в один клик, или Vagrant д...
станислав мехоношин «инфраструктура для разработки в один клик, или Vagrant д...станислав мехоношин «инфраструктура для разработки в один клик, или Vagrant д...
станислав мехоношин «инфраструктура для разработки в один клик, или Vagrant д...
 
Cистемы автоматической сборки проектов (Полина Фоминых)
Cистемы автоматической сборки проектов (Полина Фоминых)Cистемы автоматической сборки проектов (Полина Фоминых)
Cистемы автоматической сборки проектов (Полина Фоминых)
 
selenium stack in python
selenium stack in pythonselenium stack in python
selenium stack in python
 
Приемы Сontinuous Integration при разработке приложений на Caché
Приемы Сontinuous Integration при разработке приложений на CachéПриемы Сontinuous Integration при разработке приложений на Caché
Приемы Сontinuous Integration при разработке приложений на Caché
 
Caché github continuous intergration
Caché github continuous intergrationCaché github continuous intergration
Caché github continuous intergration
 
системы сборок проектов
системы сборок проектовсистемы сборок проектов
системы сборок проектов
 
Готовим Docker для Автоматизации Тестирования
Готовим Docker для Автоматизации ТестированияГотовим Docker для Автоматизации Тестирования
Готовим Docker для Автоматизации Тестирования
 
Codeception + Docker + Robo и что из этого вышло
Codeception + Docker + Robo и что из этого вышлоCodeception + Docker + Robo и что из этого вышло
Codeception + Docker + Robo и что из этого вышло
 

Similar to «Composer vs. копипаст модулей битрикса из проекта в проект»

Практика разработки веб-серверов на Rust
Практика разработки веб-серверов на RustПрактика разработки веб-серверов на Rust
Практика разработки веб-серверов на Rust
Michael Pankov
 
Как благодаря композеру использовать сторонние компоненты в Magento 2
Как благодаря композеру использовать сторонние компоненты в Magento 2Как благодаря композеру использовать сторонние компоненты в Magento 2
Как благодаря композеру использовать сторонние компоненты в Magento 2
Elogic Magento Development
 
Локальное окружение на Docker
Локальное окружение на DockerЛокальное окружение на Docker
Локальное окружение на Docker
Михаил Бакулин
 
Net core and linux in production
Net core and linux in productionNet core and linux in production
Net core and linux in production
Anatoly Popov
 
Шаблоны контейнеров в Virtuozzo
Шаблоны контейнеров в VirtuozzoШаблоны контейнеров в Virtuozzo
Шаблоны контейнеров в Virtuozzo
CEE-SEC(R)
 
NPM и модульная архитектура приложения
NPM и модульная архитектура приложенияNPM и модульная архитектура приложения
NPM и модульная архитектура приложения
Denis Latushkin
 
Павел Брылов, Skype
Павел Брылов, SkypeПавел Брылов, Skype
Павел Брылов, Skype
Ontico
 
Workflow: работа над проектом в Яндексе
Workflow: работа над проектом в ЯндексеWorkflow: работа над проектом в Яндексе
Workflow: работа над проектом в Яндексе
Denis Chistyakov
 
Ігор Карпиленко — PHPStorm for drupal developer
Ігор Карпиленко — PHPStorm for drupal developerІгор Карпиленко — PHPStorm for drupal developer
Ігор Карпиленко — PHPStorm for drupal developer
LEDC 2016
 
Денис Чистяков: Workflow. Работа над проектом в Яндексе
Денис Чистяков: Workflow. Работа над проектом в ЯндексеДенис Чистяков: Workflow. Работа над проектом в Яндексе
Денис Чистяков: Workflow. Работа над проектом в ЯндексеYandex
 
QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...
QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...
QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...
QAFest
 
06 php instalation_ru
06 php instalation_ru06 php instalation_ru
06 php instalation_ru
mcroitor
 
Краткое описание библиотеки анализа кода VivaCore
Краткое описание библиотеки анализа кода VivaCoreКраткое описание библиотеки анализа кода VivaCore
Краткое описание библиотеки анализа кода VivaCore
Tatyanazaxarova
 
redux: the best for isomorphic apps
redux: the best for isomorphic appsredux: the best for isomorphic apps
redux: the best for isomorphic apps
Denis Izmaylov
 
WebdriverIO + Puppeteer. Double gun – double fun
WebdriverIO + Puppeteer. Double gun – double funWebdriverIO + Puppeteer. Double gun – double fun
WebdriverIO + Puppeteer. Double gun – double fun
Alexandr Khotemskoy
 
Николай Сивко "Хорошо поддерживаемое в продакшне приложение"
Николай Сивко "Хорошо поддерживаемое в продакшне приложение"Николай Сивко "Хорошо поддерживаемое в продакшне приложение"
Николай Сивко "Хорошо поддерживаемое в продакшне приложение"
Tanya Denisyuk
 
Экспорт алгоритмов и создание независимых приложений
Экспорт алгоритмов и создание независимых приложенийЭкспорт алгоритмов и создание независимых приложений
Экспорт алгоритмов и создание независимых приложений
MATLAB
 
Использование сторонних библиотек в веб-приложении
Использование сторонних библиотек в веб-приложенииИспользование сторонних библиотек в веб-приложении
Использование сторонних библиотек в веб-приложении
Denis Latushkin
 
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
HappyDev
 

Similar to «Composer vs. копипаст модулей битрикса из проекта в проект» (20)

Практика разработки веб-серверов на Rust
Практика разработки веб-серверов на RustПрактика разработки веб-серверов на Rust
Практика разработки веб-серверов на Rust
 
Как благодаря композеру использовать сторонние компоненты в Magento 2
Как благодаря композеру использовать сторонние компоненты в Magento 2Как благодаря композеру использовать сторонние компоненты в Magento 2
Как благодаря композеру использовать сторонние компоненты в Magento 2
 
Continuous integration
Continuous integrationContinuous integration
Continuous integration
 
Локальное окружение на Docker
Локальное окружение на DockerЛокальное окружение на Docker
Локальное окружение на Docker
 
Net core and linux in production
Net core and linux in productionNet core and linux in production
Net core and linux in production
 
Шаблоны контейнеров в Virtuozzo
Шаблоны контейнеров в VirtuozzoШаблоны контейнеров в Virtuozzo
Шаблоны контейнеров в Virtuozzo
 
NPM и модульная архитектура приложения
NPM и модульная архитектура приложенияNPM и модульная архитектура приложения
NPM и модульная архитектура приложения
 
Павел Брылов, Skype
Павел Брылов, SkypeПавел Брылов, Skype
Павел Брылов, Skype
 
Workflow: работа над проектом в Яндексе
Workflow: работа над проектом в ЯндексеWorkflow: работа над проектом в Яндексе
Workflow: работа над проектом в Яндексе
 
Ігор Карпиленко — PHPStorm for drupal developer
Ігор Карпиленко — PHPStorm for drupal developerІгор Карпиленко — PHPStorm for drupal developer
Ігор Карпиленко — PHPStorm for drupal developer
 
Денис Чистяков: Workflow. Работа над проектом в Яндексе
Денис Чистяков: Workflow. Работа над проектом в ЯндексеДенис Чистяков: Workflow. Работа над проектом в Яндексе
Денис Чистяков: Workflow. Работа над проектом в Яндексе
 
QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...
QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...
QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...
 
06 php instalation_ru
06 php instalation_ru06 php instalation_ru
06 php instalation_ru
 
Краткое описание библиотеки анализа кода VivaCore
Краткое описание библиотеки анализа кода VivaCoreКраткое описание библиотеки анализа кода VivaCore
Краткое описание библиотеки анализа кода VivaCore
 
redux: the best for isomorphic apps
redux: the best for isomorphic appsredux: the best for isomorphic apps
redux: the best for isomorphic apps
 
WebdriverIO + Puppeteer. Double gun – double fun
WebdriverIO + Puppeteer. Double gun – double funWebdriverIO + Puppeteer. Double gun – double fun
WebdriverIO + Puppeteer. Double gun – double fun
 
Николай Сивко "Хорошо поддерживаемое в продакшне приложение"
Николай Сивко "Хорошо поддерживаемое в продакшне приложение"Николай Сивко "Хорошо поддерживаемое в продакшне приложение"
Николай Сивко "Хорошо поддерживаемое в продакшне приложение"
 
Экспорт алгоритмов и создание независимых приложений
Экспорт алгоритмов и создание независимых приложенийЭкспорт алгоритмов и создание независимых приложений
Экспорт алгоритмов и создание независимых приложений
 
Использование сторонних библиотек в веб-приложении
Использование сторонних библиотек в веб-приложенииИспользование сторонних библиотек в веб-приложении
Использование сторонних библиотек в веб-приложении
 
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
 

More from Гузель Рахимова

Аналитика требований в разрезе управления проектами
Аналитика требований в разрезе управления проектамиАналитика требований в разрезе управления проектами
Аналитика требований в разрезе управления проектами
Гузель Рахимова
 
«Разработка и оптимизация высоконагруженного проекта»
«Разработка и оптимизация высоконагруженного проекта» «Разработка и оптимизация высоконагруженного проекта»
«Разработка и оптимизация высоконагруженного проекта»
Гузель Рахимова
 
«Композитный сайт. Ускорение отдачи сайта в 100 раз»
«Композитный сайт. Ускорение отдачи сайта в 100 раз» «Композитный сайт. Ускорение отдачи сайта в 100 раз»
«Композитный сайт. Ускорение отдачи сайта в 100 раз»
Гузель Рахимова
 
«Highload блоки и новое api к ним»
«Highload блоки и новое api к ним» «Highload блоки и новое api к ним»
«Highload блоки и новое api к ним»
Гузель Рахимова
 
«Сетевые протоколы для веб разработчика — выжимаем максимум»
«Сетевые протоколы для веб разработчика — выжимаем максимум» «Сетевые протоколы для веб разработчика — выжимаем максимум»
«Сетевые протоколы для веб разработчика — выжимаем максимум»
Гузель Рахимова
 
Анализ входящих требований
Анализ входящих требованийАнализ входящих требований
Анализ входящих требований
Гузель Рахимова
 

More from Гузель Рахимова (6)

Аналитика требований в разрезе управления проектами
Аналитика требований в разрезе управления проектамиАналитика требований в разрезе управления проектами
Аналитика требований в разрезе управления проектами
 
«Разработка и оптимизация высоконагруженного проекта»
«Разработка и оптимизация высоконагруженного проекта» «Разработка и оптимизация высоконагруженного проекта»
«Разработка и оптимизация высоконагруженного проекта»
 
«Композитный сайт. Ускорение отдачи сайта в 100 раз»
«Композитный сайт. Ускорение отдачи сайта в 100 раз» «Композитный сайт. Ускорение отдачи сайта в 100 раз»
«Композитный сайт. Ускорение отдачи сайта в 100 раз»
 
«Highload блоки и новое api к ним»
«Highload блоки и новое api к ним» «Highload блоки и новое api к ним»
«Highload блоки и новое api к ним»
 
«Сетевые протоколы для веб разработчика — выжимаем максимум»
«Сетевые протоколы для веб разработчика — выжимаем максимум» «Сетевые протоколы для веб разработчика — выжимаем максимум»
«Сетевые протоколы для веб разработчика — выжимаем максимум»
 
Анализ входящих требований
Анализ входящих требованийАнализ входящих требований
Анализ входящих требований
 

«Composer vs. копипаст модулей битрикса из проекта в проект»

  • 1. Composer vs. Копипаст модулей Битрикса из проекта в проект Осотов Михаил
  • 2. Composer Composer (getcomposer.org) — менеджер зависимостей для PHP. В отличие от PEAR Composer устанавливает зависимости не глобально для всего сервера, а локально для конкретного проекта.
  • 3. Как это работает 1. Есть проект, который зависит от нескольких библиотек. 2. Некоторые из этих библиотек зависят от других библиотек. 3. Вы описываете только те библиотеки, от которых непосредственно зависит ваш код. 4. Composer находит нужные версии требуемых библиотек, скачивает их и устанавливает в папку вашего проекта.
  • 4. Где могут располагаться зависимости? • официальный репозиторий packagist.org • git, mercurial или svn репозиторий • можно скачать что угодно, лишь бы был url и доступ
  • 5. Что нужно для начала работы? • composer.phar • composer.json { "require": { "php":">=5.3.0", "phpunit/phpunit":"3.7.*", "twig/twig":">=1.8,<2.0-dev" } }
  • 7. Но у нас есть проблема! Composer устанавливает зависимости в /vendor/
  • 8. Модуль битрикса в /vendor/ никому не нужен! Что делать? • composer/installers • использовать плагин для Composer
  • 9. Плагин для Composer • https://getcomposer.org/doc/articles/custom-installers.md - документация • https://github.com/osotov/bitrix-composer-module-installer - живой пример на основе документации
  • 10. ModuleInstallerPlugin.php <?php namespace BitrixComposer; use ComposerComposer; use ComposerIOIOInterface; use ComposerPluginPluginInterface; class ModuleInstallerPlugin implements PluginInterface { public function activate(Composer $composer, IOInterface $io) { $installer = new ModuleInstaller($io, $composer); $composer->getInstallationManager()->addInstaller($installer); } }
  • 11. ModuleInstaller.php class ModuleInstaller extends LibraryInstaller { const PACKAGE_TYPE = 'bitrix-module-installer'; public function getPackageBasePath(PackageInterface $package) { $extras = $package->getExtra(); if ((array_key_exists('bitrix_module_name', $extras)) && (! empty($extras['bitrix_module_name']))) { $name = (string) $extras['bitrix_module_name']; } else { throw new Exception( 'Unable to install module, composer.json must contain module name declaration like this: ' . '"extra": { "bitrix_module_name": "somename" } ' ); } return 'local/modules/' . $name; } }
  • 12. composer.json вашего модуля { "name":"bitrix/bitrix_template_module", "type": "bitrix-module-installer", "description":"Bitrix custom project template module", "license": "MIT", "extra": { "bitrix_module_name": "CustomProjectModule" }, "require":{ "php":">=5.3.0", "osotov/bitrix-module-installer-plugin": ">=1.0.0" } }
  • 14. Что посмотреть? • getcomposer.org • http://habrahabr.ru/post/145946/ • https://github.com/composer/installers