Код: Выделить всё
{
"require": {
"league/omnipay": "^3.2"
},
"config": {
"allow-plugins": {
"php-http/discovery": true
}
}
}
Далее я хочу собрать несколько сопутствующих плагинов, которые предлагают различные конкретные шлюзы: PayPal, Stripe, WorldPay. и т. д., чтобы пользователи могли выбирать, какие из них они хотят использовать на своем сайте.
Например, для PayPal требуется следующий композитор.json:
Код: Выделить всё
{
"require": {
"league/omnipay": "^3.2",
"omnipay/paypal": "^3.0"
}
}
Я хотел бы каким-то образом проинструктировать Composer (и, следовательно, мое PHP-приложение, когда ему нужно загрузить классы), что «библиотека League/omnipay находится там, приятель --->», чтобы он загружал/обновлял только те дополнительные материалы, которые ему нужны специально для интеграции PayPal. То же самое касается модулей Square, Stripe и т. д.
Я пробовал возиться с такими вещами:
Код: Выделить всё
...
"repositories": [
{
"type": "path",
"url": "../core_module/vendor/omnipay"
}
],
...
После установки различные плагины располагаются рядом друг с другом:
Код: Выделить всё
plugins/core_module
plugins/gateway_paypal
plugins/gateway_stripe
plugins/...
Как я могу указать Composer загружать/поддерживать только одну копию каждой зависимости и не дублировать копии в core_module?
Или, если это невозможно, какие еще варианты доступны? (символические ссылки могут работать, но мне нужно учитывать и пользователей Windows).
Одна вещь, которую я еще не пробовал, которая может работать в соответствии с другими темами SO, - это добавление этого в композитор.json каждого плагина шлюза:
Код: Выделить всё
{
"config": {
"vendor-dir": "../core_module/vendor/"
}
}
Моя единственная оговорка: этот подход не разделяет вещи, поэтому, если кто-то решит отказаться от PayPal и использовать Stripe в будущем, его распаковка будет более сложной и потенциально оставит мусор на диске. Если код шлюза PayPal и зависимости могут быть ограничены отдельной папкой шлюза_paypal, удаление представляет собой просто удаление всего каталога. Я бы предпочел это, чем загрязнять каталог поставщика core_module, если это возможно.
Мобильная версия