15
Composer vs. Копипаст модулей Битрикса из проекта в проект Осотов Михаил

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

  • Upload
    -

  • View
    230

  • Download
    3

Embed Size (px)

DESCRIPTION

Автор: Михаил Осотов, веб-разработчик компании "Центр Высоких Технологий". Использование composer в контексте Битрикс.

Citation preview

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

Composer vs. Копипаст модулей Битрикса из проекта в проект

Осотов Михаил

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

Composer

Composer (getcomposer.org) — менеджер зависимостей для PHP.

В отличие от PEAR Composer устанавливает зависимости не глобально для всего сервера, а локально для конкретного проекта.

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

Как это работает

1. Есть проект, который зависит от нескольких библиотек.2. Некоторые из этих библиотек зависят от других библиотек.3. Вы описываете только те библиотеки, от которых

непосредственно зависит ваш код.4. Composer находит нужные версии требуемых библиотек,

скачивает их и устанавливает в папку вашего проекта.

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

Где могут располагаться зависимости?• официальный репозиторий packagist.org• git, mercurial или svn репозиторий• можно скачать что угодно, лишь бы был url и доступ

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

Что нужно для начала работы?

• composer.phar• composer.json

{ "require": { "php":">=5.3.0", "phpunit/phpunit":"3.7.*", "twig/twig":">=1.8,<2.0-dev" }}

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

После установки получаем

• /vendor/• composer.lock

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

Но у нас есть проблема!

Composer устанавливает зависимости в /vendor/

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

Модуль битрикса в /vendor/ никому не нужен!

Что делать?• composer/installers• использовать плагин для Composer

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

Плагин для Composer

• https://getcomposer.org/doc/articles/custom-installers.md - документация

• https://github.com/osotov/bitrix-composer-module-installer - живой пример на основе документации

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

ModuleInstallerPlugin.php<?php

namespace Bitrix\Composer;

use Composer\Composer;

use Composer\IO\IOInterface;

use Composer\Plugin\PluginInterface;

class ModuleInstallerPlugin implements PluginInterface {

public function activate(Composer $composer, IOInterface $io)

{

$installer = new ModuleInstaller($io, $composer);

$composer->getInstallationManager()->addInstaller($installer);

}

}

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

ModuleInstaller.phpclass 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;

}

}

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

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"

}

}

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

Небольшой совет

Делайте релизы!git tag вам в помощь

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

Вопросы?

Twitter: @reghanchegSkype: reghan88E-mail: [email protected]