Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Не понятно, кто этим будет заниматься.ну почему же — в каждой команде есть обычно ответственный человек, aka team-lead / architect который должен принимать подобные решения.
По хорошему это должно решать на уровне некоего центрального репозитория.на уровне компании / проекта или всего php сообщества?
composer install
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Warning: The lock file is not up to date with the latest changes in composer.json. You may be getting outdated dependencies. *Run update* to update them.
Nothing to install or update
Generating autoload files
Всё таки свитч чуть быстрее
Не нужно настраивать хуки чтобы они делали composer install
Как я уже говорил, можно быстро посмотреть дифф библиотек и увидеть полную картину изменений от версии к версии
Всё таки деплой быстрее, так как кешей в чистом контейнере нет и там нужно делать install
Плюс когда делаешь install теоретически могут быть проблемы с репозиториями
Кто знает, что прийдёт в голову разработчику того или иного пакета, вдпруг он решит удалить свой репозиторий.
Решение команды разработчиков ESLint было довольно радикальным, но вполне рабочим. Они решили опубликовать пакет ESLint со всеми зависимостями. То есть скачивая архив ESLint, утилита npm скачает также и весь рабочий node_modules для необходимой версии ESLint.
Это часть нашего приложения, за которое мы несем ответственность
отсутствие контроля над разработкой стороннего кода. В случае закрытия или «плохого кода» в проекте вендора, мы теряем функциональность
Любая библиотека может быть удалена в любой момент времени, независимо от авторства
Не вижу особых проблем в том, чтобы быть к этому готовым
Но приведите мне хотя бы один довод, почему бы их не хранить в своем соседнем репозитории
Но мы же не отказывается от всего этого?
Хранение даже достаточно большого набора зависимостей совершенно незаметно на этом фоне и не вызывает каких-либо затруднений
Именно затем и нужно, что все прекрасно работает, а через минуту — опа, а ведь ничего не предвещало беды
И на вопрос «зачем» я могу ответить — а почему, собственно, нет?
Зачем мне компилятор, если я могу взять бинарник
кто им пользуется и найти исходиники можно за считанные минуты
Выстраивать схему проксирования пакетов, резервируя под нее некоторые мощности и отслеживать корректность работы еще и этой системы, или просто положить код рядом и пусть лежит?
Чем это настолько принципиально отличается от хранения composer.lock, кроме места?
Ну вы же должны скомпилировать ваш проект перед деплоем или не должны?
Открою вам секрет — если у вас разрешены зависимости с помощью composer, то вы сможете найти все исходники от которых вы зависите в считанные секунды открыв каталог vendor.
Есть такая хорошая штука, как инкапсуляция. Если вы льете зависимости в репу вашего проекта, это несколько нарушает инкапсуляцию, не находите?
Я пишу код на php, phalcon и zephir не использую, что прикажете компилировать?
А нету каталога vendor, или мы теперь надеемся на содержимое рабочей машины программиста?
Зачем мне бинарник, если в мире сотня тысяч человек найдется, кто им пользуется и найти исходиники можно за считанные минуты
Чем инкапсуляция для программиста важнее целостности проекта для его владельца?
Перефразирую — почему вы не храните в репозитории проекта PHP интерпретатор или тот же composer?
Надеюсь вы поняли мыслю.
Уже дважды отвечал. Поясняю более детально: я пишу скрипты, фреймворк и код других библиотек — это скрипты. Весь проект — исключительно скрипты и немного статики. Не компилируются. Вообще. Никогда.
Понял, попытка поймать меня на расхождениях в моих собственных мыслях. Но нет, я программист...
у меня в отдельном репозитории
Исчезновение всего линукса слишком маловероятно
Скажите, пожалуйста, Вы читать умеете?
Слабо связанные имеет смысл хранить, но не в проекте
Библиотека же может использоваться только...
Для защиты от проблем с линуксом и интернетом у меня линуксы сложены в отдельный репозиторий на файловом сервере
Это не похоже на иронию. Это похоже исключительно на глупость, уж простите меня за резкость.
При отсутствии, например, Boost проект будет проще переписать с нуля или написать свой аналог буста.
А что касается компиляторов, то какого из 5 разных от 5 разных вендоров? Или всех сразу?
Удобство использования
Один git clone/svn checkout и с проектом можно работать, а с composer придется выполнять дополнительные действия
Вы никогда не патчили библиотеки
Вам не критична стабильность API/ABI используемых библиотек
но исправления войдут только в новую версию, которая может быть несовместима с используемой Вами
а про более общий случай.
Ну то есть полностью перепроектировать и переписать используемую библиотеку.
Даже если совместимость необходимо поддерживать не 10 лет, а всего год, то применяемые ими методики бекпортирования и багфиксинга придется применять и вам…
Завернуть фреймворк в обертку — это по сути написать свой.
Вы знаете компиляторы для PHP? Я нет (HHVM не совсем то). И далее по ветке.
предложите, пожалуйста, вариант оберток для любой библиотеки из Boost
Просто надо стараться изолировать код приложения (бизнес логика и т.д.) от сторонних библиотек и фреймворков. Главные то не они.
А вы используете только библиотеки, которые не могут быть удалены никогда, ни при каких обстоятельствах?
Наедет какой-нибудь копираст и опа, вы не можете задеплоиться и начинаете судорожно пихать пропавшие из репозитория модули в свой репозиторий с кодом
Вы либо врёте, либо заблуждаетесь. Ни то, ни другое не делает вам чести.
Не важно куда вы будете их пихать
Вот вы можете назвать хоть одну причину не хранить зависимости в репозитории, кроме как незначительное увеличение его объёма?
Ну вот честно, правда оно того стоит?
Вот вы можете назвать хоть одну причину не хранить зависимости в репозитории, кроме как незначительное увеличение его объёма?
шаманством для выяснения что именно поменялось в коде зависимостей?
где-то рядышкомтак ведь это ключевое замечание. Обсуждение подразумевает хранение вендорского кода прямо в репозитории с проектом. В одном репозитории.
и еще не забаывать его запускать в случае обновлений.
Всего лишь немного дисциплины
Решение команды разработчиков ESLint было довольно радикальным, но вполне рабочим. Они решили опубликовать пакет ESLint со всеми зависимостями. То есть скачивая архив ESLint, утилита npm скачает также и весь рабочий node_modules для необходимой версии ESLint.
Composer — the right way