Как стать автором
Обновить

Комментарии 10

Вот так с помощью десятка костылей мы можем подружить битрикс с технологиями 2018 года.
Мне интересно, они отдел разработки полностью сократили и оставили только отдел маркетинга?
Система требующая выставлять mbstring.func_overload = 2 на php7.2 вызывает уважение.
А обещанные третий и четвёртый этап сертификации разработчиков не выходят уже лет пять, как и «новое ядро» D7. С — стабильность.
Не знаю, насколько хорошо вы знакомы с битриксом, но это только вершина айсберга. Хотя свою задачу — выступать в роли CMS в типовых сайтах, он выполняет достойно. В любом случае, это статья о том, как хранить свои разработки и не волноваться. Буду признателен, если комменты будут по этой теме, а не негатив в адрес битрикса.
Недавно (то ли в сентябре, то ли в октябре) 1С-Битрикс обещали выкатить поддержку composer. Не знаю в чем она будет заключаться, просто сам факт.
А они и выкатили. Получилось — как всегда. Теперь в битриксе три или четыре автозагрузчика :) А composer работает ради одной зависимости — symfony/console, на которой написана всего одна команда сомнительного назначения, без которой можно было бы обойтись. Чтобы использовать composer, встроенный в битрикс, для своих нужд, предлагается юзать merge-plugin
dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43&LESSON_ID=4637

всё как обычно в мире битрикса, все давно написано, но мы навелосипедим свой плагин-установщик


https://github.com/composer/installers
https://github.com/composer/installers/blob/master/src/Composer/Installers/BitrixInstaller.php


{
  "name": "vendor/packageName",
  "type": "bitrix-d7-module",
  "extra": {
    "installer-name": "packageName"
  },
  "require": {
    "composer/installers": "~1"
  }
}

в проекте для /local:


"extra": {
  "installer-paths": {
    "local/modules/{$vendor}.{$name}/": ["type:bitrix-d7-module"]
  }
}
Данный инсталлятор позволяет только разместить файлы в нужной директории.
github.com/composer/installers/blob/master/src/Composer/Installers/BitrixInstaller.php

Если каждый написанный Вами модуль не имеет зависимостей от других модулей, то можете пользоваться этим инсталлятором. Но после выполнения composer require Вам нужно будет зайти в панель управления и установить модуль вручную.

Если ваш модуль зависит от других, как в моём примере с СМС авторизацией, то после выполнения composer require Вам нужно будет зайти в панель управления и установить 5 модулей в нужной последовательности!

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

Composer этого и не делает. Он просто запускает процесс установки в самом модуле. Конечно composer не должен сам лезть в базу. Но выполнять хуки при установке пакета он должен. А то, что он не делает это по умолчанию, большой плюс к безопасности.
Не стоит хранить vendor-dir в local.

В local должен находиться версионируемый код проекта, а вы храните там библиотеки, которые подгружаются автоматически с помощью composer. Понятно, что можно исключить с gitignore, но зачем, если можно его хранить за пределами document_root? Это более надежно

Опираясь на последнее — не придется думать о том, чтобы не спалить содержимое этой директории через браузер. В вашем же случае придется явно запрещать доступ к этой директории в настройках веб-сервера, что излишне.

И еще. В модулях битрикса есть такая «фича», как пошаговая инсталляция/деинсталляция. В вашем случае она работать не будет. Использовать методы DoInstall и DoUninstall не является правильным. Сам битрикс при автоматической инсталляции (без участия пользователя) своих же модулей не вызывает эти методы. Подробнее можно посмотреть в этом MR — github.com/notamedia/console-jedi/issues/4
Спасибо за комментарий! Мы просто отказались от пошаговой установки, а в глобальном смысле нужно это учитывать.
За пределами document_root у меня не было возможность что-либо хранить т.к. document_root — "/" (после выполнения chroot, это один их способов изоляции у нас).
Спасибо, что упомянули про настройку вебсервере. Я не написал это в статье, но к local/vendor, к composer.json, к composer.json модулей нужно закрывать доступ.
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.