7

Вопрос по composer php. Помогите

Привет всем. Знаю, что спрашиваю не на совсем профильном ресурсе. Но вдруг мне повезет. И мне подскажут ответ, над которым я бьюсь уже неделю.

Краткая предыстория вопроса. Все началось с того, что мы с другом изучали Laravel. И все шло хорошо, пока чей-то цепкий взгляд не заметил одну удивительную для нас штуку. Оказывается, не все зависимости, которые использует Laravel установлены в папку vendor пакетного менеджера composer. Я уже даже пожалел, что кто-то на совместных занятиях у нас такой зоркий.


Начали выяснять, как Laravel работает , если установлены не все зависимости. Выяснили что зависимости-то как раз есть все. Просто часть из них скрыта в исходном коде фреймворка под директивой "replace" composer.json схемы (ссылка -> https://getcomposer.org/doc/04-schema.md#replace ). Мы кое-как вникли в смысл этой директивы. Но остался небольшой нюанс.

Смысл директивы "replace", как мы ... эээ смогли понять. Разработчик продукта имеет право воспользоваться готовым пакетом не как зависимостью (через require), а скопировать  \ форкнуть код пакета напрямую в свой разрабатываемый код. Зачем так вообще делать - отдельный вопрос. Мы не особо понимаем. Но раз так делают, значит бывает нужно.


Директива "replace" приказывает пакетному менеджеру composer не выкачивать пакет из удаленного репозитория, а просто запоминает, что этот пакет уже выкачан самим разработчиком. Естественно, разработчик в своем коде должен предусмотреть не тупое копирование кода, а все-таки правильное подключение скопированного кода. Ну то есть, например, хотя бы подключить namespace скачанного пакета в автозагрузку.


Теперь сам вопрос. В директиве "replace" мы указываем название пакета, над которым перехватываем контроль вместо composer. Но также нужно указать версию заменяемого пакета. И практически везде вместе определенной версии стоит указание "self.version"

"replace": {

"illuminate/auth": "self.version",

...

}


Что означает такое ограничение версии как "self.version"? Как composer будет определять единственную конечную версию пакета, если какой-то 3-party пакет запросит тот же illuminate/auth, но вполне определенной версии (см пример ниже)?


3-party пакет разрабатываемого проекта, подключенный как обычная зависимость через require, внутри себя требует ...

"require": {

"illuminate/auth": "8.83.1",

...

}


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

Лига программистов

2.1K постов11.9K подписчиков

Правила сообщества

- Будьте взаимовежливы, аргументируйте критику

- Приветствуются любые посты по тематике программирования

- Если ваш пост содержит ссылки на внешние ресурсы - он должен быть самодостаточным. Вариации на тему "далее читайте в моей телеге" будут удаляться из сообщества

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества