Для PHP на https://packagist.org/statistics выложено уже порядка 100 тысяч (!) библиотек, компонентов, бандлов и фреймворков. При разработке проектов, в том числе на Битриксе логично использовать готовые решения, если они помогают в решения задачи. Все подобные пакеты ставятся через Composer, который генерирует файл autoload.php в соответствии с PSR-0.
Для разработчиков было бы большим подспорьем, если бы битрикс уже шел с composer.json и поддержкой автозагрузки вендорных библиотек, чтобы можно было легко подключать опенсорсные решения в проект.
Так кто ж спорит. Только это composer.json могут навтыкать и 2, и 3 в проект.
Я же про то, чтобы Битрикс на уровне ядра встроил, дал бестпрактис, куда пакеты добавлять, где должен composer.json лежать, как это должно совмещаться с модулями и компонентами Битрикса, сделать поддержку composer.json на уровне маркетплейсных модулей, чтобы при установке модуля проигрывался composer.
маркетплейс и есть композер для битрикса. Немного более сложный, но выполняет полностью свои задачи. Модули распространяются только через маркетплейс. Откуда то еще не нужно, иначе это будет угрожать безопасности CRM, а, следовательно, репутации компании. Никто ж не будет разбираться, когда услышат, что кто то ломанул сайт на битриксе. Услышат Сломали битрикс и все. А на деле был какой то кривой и дырявый модуль от школьника из сибири. В маркетплейсе же каждый модуль проверяется тестировщиками и различными автотестами на совместимости и пр. Мы в свое время на модуле AdPar собаку съели пока выложили его в маркетплейс.
Я могу привести еще много примеров полезных пакетов.
Вы предлагаете эти готовые пакеты копипастить внутрь модуля, кроме того самому еще следить за обновлениями и копипастить эти обновления в модуль. Также библиотеки могут понадобиться в нескольких модулях, и сейчас получается будет несколько копий библиотек в нескольких модулях. Тут мы уже помимо дублирования кода получаем еще проблему с неймспейсами, либо придется тупо переделывать неймспейсы библиотеки в момент ее копирования в модуль. Я хорошо понимаю, как работает экосистема Битрикса, но она живет немного в параллельной вселенной в отличие от остального PHP-сообщества, где уже дефакто является стандартом composer, Packagist, где аккумулируются все готовые решения и как-то уже немного странно, что в продуктах Битрикса нельзя органично использовать это.
Процесс проверки модуля перед публикацией в маркетплейс и не меняется. Просто часть кода ставится через composer, а не лежит внутри модуля.
Примеры библиотек для генерации разных типов файлов
https://github.com/tecnickcom/tcpdf
https://github.com/PHPOffice/PHPExcel
...
Примеры официальных SDK для работы с теми или иными сервисами:
https://github.com/aws/aws-sdk-php
https://packagist.org/packages/mailchimp/mailchimp
https://github.com/jack-theripper/yandex
...
что вам мешает сделать как я написал?
Вы предлагаете эти готовые пакеты копипастить внутрь модуля
нет, подключайте их через композер и в инит.пхп и будет вам счастье.
вы скорее всего сейчас углубитесь в рассуждения написания своего модуля и на тему того, как его устанавливать с зависимостями компосера. я задам вам вопрос, а как вы пользоваться компосером планируете на шаредхостинге без доступа к Cli?
> Я же про то, чтобы Битрикс на уровне ядра встроил, дал бестпрактис, куда пакеты добавлять, где должен composer.json лежать, как это должно совмещаться с модулями и компонентами Битрикса, сделать поддержку composer.json на уровне маркетплейсных модулей, чтобы при установке модуля проигрывался composer.
Предложение про системную поддержку composer в Битриксе, а не про конкретно взятый проект на Битриксе.
1. В пакете composer/installers уже реализована поддержка модулей, компонентов и шаблонов битрикса. Если composer.json находится в корне сайта то композер сам положит их в директорию bitrix, для модулей правда потребуется еще установить их через админку. Если же composer.json находится не в корне сайта то в нем нужно прописать путь к директории bitrix (код)
3. Возможны конфликты зависимостей между модулями. Что впрочем и сейчас не исключено, например если несколько модулей зависят от разных версий библиотек если они просто зашиты в модуль, а не переложены в свой неймспейс.
4. Вообще было бы удобно не подключать и проверять установлен ли модуль каждый раз
use Bitrix\Main\Loader;
if (!Loader::includeModule('iblock')) {
//fail gracefully
}
а разделить обработку таких исключительных ситуаций от основной логики и не дублировать их везде. Например, что бы была возможность поставить в одном месте обработку исключения вроде Bitrix\Main\LoaderException
5. Еще было бы удобно, прописывать зависимости в модулях. Допустим если в модуле прописать что он зависит от asd.iblock то что бы при установке этого модуля установился еще и asd.iblock
6. При этом нужно пересмотреть систему обновления модулей
посмотрю я как будет проигрыватся composer на хостинге с ограничением времени запуска и памяти. все что надо выкладываете в модуле - запуская композер на локале и копируя всю папку vendor и vendor/autoload.php, вычищаете мусор, подключаете в include.php модуля так сделано в CS-cart
а в ядро эту поделку тащит не надо. лучше пусть автозагрукзу доделают стандартную
Для разработчиков было бы большим подспорьем, если бы битрикс уже шел с composer.json и поддержкой автозагрузки вендорных библиотек, чтобы можно было легко подключать опенсорсные решения в проект.
композер мы уже успешно используем несколько лет без поддержки его в ядре как и другие партнеры bitrix
большинство этих крутых библиотек из packagist не совместимы с настройками bitrix так что поддержка композер нифига не решает надо делать нормальные настройки впервую очередь - выкинуть уже нафиг mbfuction_overload и кодировку windows1251 из ядра
сделать поддержку composer.json на уровне маркетплейсных модулей, чтобы при установке модуля проигрывался composer.
это дичь xD. если при проигрывание композера возникнут проблемы с зависимостями или композер отвалится на полпути по таймауту или из за нехватки памяти - что тогда ?
Я же про то, чтобы Битрикс на уровне ядра встроил, дал бестпрактис, куда пакеты добавлять, где должен composer.json лежать, как это должно совмещаться с модулями и компонентами Битрикса, сделать поддержку composer.json на уровне маркетплейсных модулей, чтобы при установке модуля проигрывался composer.
В маркетплейсе же каждый модуль проверяется тестировщиками и различными автотестами на совместимости и пр. Мы в свое время на модуле AdPar собаку съели пока выложили его в маркетплейс.
Примеры библиотек для генерации разных типов файлов
...
Примеры официальных SDK для работы с теми или иными сервисами:
...
Я могу привести еще много примеров полезных пакетов.
Вы предлагаете эти готовые пакеты копипастить внутрь модуля, кроме того самому еще следить за обновлениями и копипастить эти обновления в модуль. Также библиотеки могут понадобиться в нескольких модулях, и сейчас получается будет несколько копий библиотек в нескольких модулях. Тут мы уже помимо дублирования кода получаем еще проблему с неймспейсами, либо придется тупо переделывать неймспейсы библиотеки в момент ее копирования в модуль.
Я хорошо понимаю, как работает экосистема Битрикса, но она живет немного в параллельной вселенной в отличие от остального PHP-сообщества, где уже дефакто является стандартом composer, Packagist, где аккумулируются все готовые решения и как-то уже немного странно, что в продуктах Битрикса нельзя органично использовать это.
что вам мешает сделать как я написал?
вы скорее всего сейчас углубитесь в рассуждения написания своего модуля и на тему того, как его устанавливать с зависимостями компосера.
я задам вам вопрос, а как вы пользоваться компосером планируете на шаредхостинге без доступа к Cli?
В чем проблема то? Или прям хочется чтоб через админку натыкать можно было? Нафига?
> Я же про то, чтобы Битрикс на уровне ядра встроил, дал бестпрактис, куда пакеты добавлять, где должен composer.json лежать, как это должно совмещаться с модулями и компонентами Битрикса, сделать поддержку composer.json на уровне маркетплейсных модулей, чтобы при установке модуля проигрывался composer.
Предложение про системную поддержку composer в Битриксе, а не про конкретно взятый проект на Битриксе.
В пакете
composer.json находится в корне сайта то композер сам положит их в директорию bitrix, для модулей правда потребуется еще установить их через админку. Если же composer.json находится не в корне сайта то в нем нужно прописать путь к директории bitrix (
Пример использования
2.
PSR-0
если использовать в модулях автозагрузку почему PSR-0 а не PSR-4. Впрочем это не суть
3.
Возможны конфликты зависимостей между модулями. Что впрочем и сейчас не исключено, например если несколько модулей зависят от разных версий библиотек если они просто зашиты в модуль, а не переложены в свой неймспейс.
4.
Вообще было бы удобно не подключать и проверять установлен ли модуль каждый раз
5.
Еще было бы удобно, прописывать зависимости в модулях. Допустим если в модуле прописать что он зависит от asd.iblock то что бы при установке этого модуля установился еще и asd.iblock
6.
При этом нужно пересмотреть систему обновления модулей
7.
Кроме того как быть с платными модулями
посмотрю я как будет проигрыватся composer на хостинге с ограничением времени запуска и памяти.
все что надо выкладываете в модуле - запуская композер на локале и копируя всю папку vendor и vendor/autoload.php, вычищаете мусор, подключаете в include.php модуля
так сделано в CS-cart
а в ядро эту поделку тащит не надо. лучше пусть автозагрукзу доделают стандартную
как и другие партнеры bitrix
большинство этих крутых библиотек из packagist не совместимы с настройками bitrix
так что поддержка композер нифига не решает
надо делать нормальные настройки впервую очередь - выкинуть уже нафиг mbfuction_overload и кодировку windows1251 из ядра