Поддержка Composer и стандарта автозагрузки PSR-0

Рейтинг: 16.0755  
На голосовании
Предложил Салихов Ильяс 15.07.2016 12:44:17

Поддержка Composer и стандарта автозагрузки PSR-0

Для PHP на https://packagist.org/statistics выложено уже порядка 100 тысяч (!) библиотек, компонентов, бандлов и фреймворков. При разработке проектов, в том числе на Битриксе логично использовать готовые решения, если они помогают в решения задачи. Все подобные пакеты ставятся через Composer, который генерирует файл autoload.php в соответствии с PSR-0.

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

Я видел идею http://idea.1c-bitrix.ru/implement-the-ability-to-install-bitrix-using-composer/, но она про установку битрикса через composer, это как раз не так критично, а вот подключение внешних библиотек в проект было бы очень полезной вещью.

Рейтинг: 6.0451  
Ипатов Дмитрий 20.07.2016 18:31:03
Отличная идея!
Рейтинг: 6.0451  
Зотов Егор 24.07.2016 10:27:27
Полностью поддерживаю.
Рейтинг: -6.0451  
Webber Maxyc 09.08.2016 14:01:42
Простите, но что вам мешает подключить vendor/autoload.php в init.php и иметь весь функционал композера?
Рейтинг: 6.045  
Салихов Ильяс 09.08.2016 14:23:39
Так кто ж спорит. Только это composer.json могут навтыкать и 2, и 3 в проект.

Я же про то, чтобы Битрикс на уровне ядра встроил, дал бестпрактис, куда пакеты добавлять, где должен composer.json лежать, как это должно совмещаться с модулями и компонентами Битрикса, сделать поддержку composer.json на уровне маркетплейсных модулей, чтобы при установке модуля проигрывался composer.
Рейтинг: -7.7398  
Webber Maxyc 11.08.2016 10:42:29
маркетплейс и есть композер для битрикса. Немного более сложный, но выполняет полностью свои задачи. Модули распространяются только через маркетплейс. Откуда то еще не нужно, иначе это будет угрожать безопасности CRM, а, следовательно, репутации компании. Никто ж не будет разбираться, когда услышат, что кто то ломанул сайт на битриксе. Услышат Сломали битрикс и все. А на деле был какой то кривой и дырявый модуль от школьника из сибири.
В маркетплейсе же каждый модуль проверяется тестировщиками и различными автотестами на совместимости и пр. Мы в свое время на модуле AdPar собаку съели пока выложили его в маркетплейс.
Рейтинг: 5.4115  
Салихов Ильяс 11.08.2016 11:06:22
Процесс проверки модуля перед публикацией в маркетплейс и не меняется. Просто часть кода ставится через 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
...

Я могу привести еще много примеров полезных пакетов.

Вы предлагаете эти готовые пакеты копипастить внутрь модуля, кроме того самому еще следить за обновлениями и копипастить эти обновления в модуль. Также библиотеки могут понадобиться в нескольких модулях, и сейчас получается будет несколько копий библиотек в нескольких модулях. Тут мы уже помимо дублирования кода получаем еще проблему с неймспейсами, либо придется тупо переделывать неймспейсы библиотеки в момент ее копирования в модуль.
Я хорошо понимаю, как работает экосистема Битрикса, но она живет немного в параллельной вселенной в отличие от остального PHP-сообщества, где уже дефакто является стандартом composer, Packagist, где аккумулируются все готовые решения и как-то уже немного странно, что в продуктах Битрикса нельзя органично использовать это.
Рейтинг: 0  
Webber Maxyc 11.08.2016 11:59:51
Процесс проверки модуля перед публикацией в маркетплейс и не меняется. Просто часть кода ставится через 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?
Рейтинг: 7.1138  
Денис 11.08.2016 12:05:52
я не уверен, но возможно битриксу диктует условия денежный рынок, а не рынок опенсорса.
Рейтинг: 0  
serginhold 29.08.2016 21:00:23
В
/bitrix{или local}/php_interface/init.php
добавить
require $_SERVER['DOCUMENT_ROOT'] . '/vendor/autoload.php'; // Composer

В чем проблема то? Или прям хочется чтоб через админку натыкать можно было? Нафига?
Рейтинг: 6.0451  
Салихов Ильяс 29.08.2016 21:05:07
Я писал выше:

> Я же про то, чтобы Битрикс на уровне ядра встроил, дал бестпрактис, куда пакеты добавлять, где должен composer.json лежать, как это должно совмещаться с модулями и компонентами Битрикса, сделать поддержку composer.json на уровне маркетплейсных модулей, чтобы при установке модуля проигрывался composer.

Предложение про системную поддержку composer в Битриксе, а не про конкретно взятый проект на Битриксе.
Рейтинг: 6.7517  
Ли Антон 22.09.2016 15:41:40
1.
В пакете composer/installers уже реализована поддержка модулей, компонентов и шаблонов битрикса. Если
composer.json находится в корне сайта то композер сам положит их в директорию bitrix, для модулей правда потребуется еще установить их через админку. Если же composer.json находится не в корне сайта то в нем нужно прописать путь к директории bitrix (код)
{ "extra": { "bitrix-dir": "s1/bitrix" } } 

Пример использования bitrix-expert/bbc

2.
PSR-0 помечен устаревшим с 2014-10-21 в пользу PSR-4
если использовать в модулях автозагрузку почему PSR-0 а не PSR-4. Впрочем это не суть композер поддерживает разные способы автозагрузки.

3.
Возможны конфликты зависимостей между модулями. Что впрочем и сейчас не исключено, например если несколько модулей зависят от разных версий библиотек если они просто зашиты в модуль, а не переложены в свой неймспейс.

4.
Вообще было бы удобно не подключать и проверять установлен ли модуль каждый раз
use Bitrix\Main\Loader;
if (!Loader::includeModule('iblock')) { 
    //fail gracefully
} 
а разделить обработку таких исключительных ситуаций от основной логики и не дублировать их везде. Например, что бы была возможность поставить в одном месте обработку исключения вроде Bitrix\Main\LoaderException

5.
Еще было бы удобно, прописывать зависимости в модулях. Допустим если в модуле прописать что он зависит от asd.iblock то что бы при установке этого модуля установился еще и asd.iblock

6.
При этом нужно пересмотреть систему обновления модулей

7.
Кроме того как быть с платными модулями
Рейтинг: -1  
Ниган 02.04.2017 20:57:13
чтобы при установке модуля проигрывался composer.

посмотрю я как будет проигрыватся composer на хостинге с ограничением времени запуска и памяти.
все что надо выкладываете в модуле - запуская композер на локале и копируя всю папку vendor и vendor/autoload.php, вычищаете мусор, подключаете в include.php модуля
так сделано в CS-cart

а в ядро эту поделку тащит не надо. лучше пусть автозагрукзу доделают стандартную
Рейтинг: 0  
Ниган 19.03.2018 20:43:52
Для разработчиков было бы большим подспорьем, если бы битрикс уже шел с composer.json и поддержкой автозагрузки вендорных библиотек, чтобы можно было легко подключать опенсорсные решения в проект.
композер мы уже успешно используем несколько лет без поддержки его в ядре
как и другие партнеры bitrix

большинство этих крутых библиотек из packagist не совместимы с настройками bitrix
так что поддержка композер нифига не решает
надо делать нормальные настройки впервую очередь - выкинуть уже нафиг mbfuction_overload и кодировку windows1251 из ядра
сделать поддержку composer.json на уровне маркетплейсных модулей, чтобы при установке модуля проигрывался composer.
это дичь xD. если при проигрывание композера возникнут проблемы с зависимостями или композер отвалится на полпути по таймауту или из за нехватки памяти -  что тогда ?