Пример использования Composer и Битрикс, установка модуля из репозитория
Редактировать

Как и зачем использовать Composer при создании проекта на Битрикс

Composer - пакетный менеджер уровня приложений для языка программирования PHP, который предоставляет средства по управлению зависимостями в PHP-приложении.

При разработке проекта на Битрикс может возникнуть необходимость написания модуля, получения стороннего модуля, добавления библиотеки для выполнения какого-либо нужного действия в проекте. Процессами установки и определения зависимостей одних модулей от других гораздо проще управлять при помощи composer.

Установка composer

Инструкции по установке composer на официальном сайте

Установить composer глобально в систему (Linux):

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('SHA384', 'composer-setup.php') === '544e09ee996cdf60ece3804abc52599c22b1f40f4323403c44d44fdfdd586475ca9813a858088ffbc1f233e9b180f061') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php --install-dir=/usr/local/bin --filename=composer
php -r "unlink('composer-setup.php');"

После выполнения этих команд composer станет доступен для вызова в консоли командой composer

Связь Битрикс и Composer

Ряд полезных статей и рассуждений на эту тему:

В общем случае, если позволяет хостинг, и сайт вынесен в отдельную папку, например так:

/var/www/some-site #site root directory
├── /.git
├── /.idea
├── /public
│   ├── /... папки разделов сайта ...
│   └── /local
├── .gitmodules
├── .gitignore
└── composer.json

в такой структуре выносим файл в непубличную часть проекта.

В случае, когда из-за особенностей хостинга или проекта, он не вынесен в отдельную публичную папку, тогда файл настроек composer храним в папке local так:

/var/www/some-site #site root directory
├── /.git
├── /.idea
├── /... папки разделов сайта ...
└── /local
    ├── /... код разработчика и настройки сайта ...
    └── composer.json
├── .gitmodules
└── .gitignore

Во всех случаях папка вендоров vendor добавляется в .gitignore

Пример содержимого файла composer.json

{
    "require": {
        "composer/installers": "~1.0",
    },
}

Для установки модулей, перечисленных в файле composer.json нужно перейти в папку, в которой находится этот файл и выполнить команду:

composer install

После этого composer создаст папку vendor, в нее будут добавлены все нужные модули и создан файл autoload.php

Для того, чтобы Битрикс подключил классы модулей полученных через composer нужно в файл init.php добавить:

<?
// composer for out public
if (file_exists($_SERVER["DOCUMENT_ROOT"]."/../vendor/autoload.php")) {
    require_once($_SERVER["DOCUMENT_ROOT"] . "/../vendor/autoload.php");
}

// composer for local
if (file_exists($_SERVER["DOCUMENT_ROOT"]."/local/vendor/autoload.php")) {
    require_once($_SERVER["DOCUMENT_ROOT"] . "/local/vendor/autoload.php");
}
?>

### Подготовка модуля Битрикс к установке через composer

Чтобы composer знал о возможности установки модуля Битрикс нужно соблюсти ряд условий:

* Нужно разместить модуль в каком-либо хранилище репозиториев, например github.com.
* В корне модуля разместить файл ```composer.json``` с информацией о модуле и его зависимостях.
  
  Пример файла:
  
  ```json
    {
        "name": "modvendor/modname",
        "description": "module description",
        "type": "bitrix-d7-module",
        "require": {
            "altayalp/ftp-client": "^1.0"
        },
        "authors": [
            {
                "name": "Your Name",
                "email": "your@email.ru"
            }
        ]
    }

Установка модуля Битрикс через composer

Есть модуль composer, который помогает в установке специфических расширений для CMS и фреймворков, он учитывает особенности архитектуры этих систем и копирует папки модулей не по стандартному пути composer, которым является папка vendor, а в нужную папку в зависимости от системы в которую ставится модуль.

Для битрикс привычными путями для установки модуля являются:

  • /bitrix/modules/
  • /local/modules/

Модуль-помощник называется composer/installers, почитать о нем можно тут, GitHub

По умолчанию он устанавливает модули Битрикс в папку /bitrix/modules/, что бы это заработало в файле композера нужно разместить такие инструкции:

{
    "name": "yourcompany/projectname",
    "type": "project",
    "authors": [
        {
            "name": "Your Name",
            "email": "your@email.ru"
        }
    ],
    "require": {
        "composer/installers": "~1.0",
        "your/modulename": "dev-master"
    },
    "config": {
    	"github-oauth": {
			"github.com": "your access token"
		}
    },
    "repositories": [
        {
            "type": "vcs",
            "url":  "https://github.com/yourlogin/your.modulename.git"
        }        
    ]
}

Для изменения пути установки и прочих параметров (о которых можно почитать тут), нужно добавить секцию “extra”, пример:

{
    "name": "yourcompany/projectname",
    "type": "project",
    "authors": [
        {
            "name": "Your Name",
            "email": "your@email.ru"
        }
    ],
    "extra": {
        "installer-paths": {
            "public/local/modules/{$vendor}.{$name}/": ["type:bitrix-d7-module"]
        }
    },
    "require": {
        "composer/installers": "~1.0",
        "your/modulename": "dev-master"
    },
    "config": {
    	"github-oauth": {
			"github.com": "your access token"
		}
    },
    "repositories": [
        {
            "type": "vcs",
            "url":  "https://github.com/yourlogin/your.modulename.git"
        }        
    ]
}

Получение токена GitHub для Composer

При попытке получения модулей из репозитория, размещенного на GitHub может появиться ошибка: Could not fetch ######, please create a GitHub OAuth token to go over the API rate limit

Для исправления этой ошибки в файл composer.json нужно добавить секцию:

"config": {
    "github-oauth": {
        "github.com": "your access token"
    }
},

Получить токен нужно в Вашем аккаунте на GitHub в разделе настроек https://github.com/settings/tokens