ݺߣ

ݺߣShare 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

«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