Использовать композитор для установки пакета в пользовательском каталоге

Я вижу, что есть уже вопрос, но он не ответил на вопрос

Как установить пакет в каталог /src?

Причина, по которой я хотел бы сделать это, - это разработка и развертывание, поэтому

  • Мне не нужно проверять базовый код Symphony в моем реестре subversion
  • Я мог бы использовать Composer для развертывания

Оглядываясь на документы Composer, я еще встретил это:

vendor-dir. По умолчанию поставщик. Вы можете установить зависимости в если вы хотите.

Могу ли я установить это на уровне Bundle? или это для общей установки?

Ответ 1

Я знаю, что это поздно, но на случай, если кто-то ищет ответ, который я нашел кропотливо (часы и часы): vendor-dir

В документации написано:

Устанавливая этот var, вы можете сделать компоновщик установкой зависимостей в каталог, отличный от поставщика

Пример:

{
    "config": {
        "vendor-dir": "website/password/vendor/"
    }
}

Из этот документ и этот документ

Опять же, надеемся спасти кого-нибудь еще пару часов.

Ответ 2

{
    "extra": {
        "installer-paths": {
            "sites/example.com/modules/{$name}": ["vendor/package"]
        }
    }
}

Подробнее.

Ответ 3

Я реализовал этот плагин для установки для установки пакетов в пользовательские (настраиваемые) папки, которые вы можете просто включить в свой композитор .json, следуйте примеру и скажите мне, есть ли у вас больше вопросов:)

https://github.com/mnsami/composer-custom-directory-installer

композитор-заказ Каталог-инсталлятор

Плагин композитора для установки различных типов композиционных пакетов в пользовательских каталогах за пределами установочного пути по умолчанию по умолчанию компоновщика, который находится в папке vendor.

Это не другая библиотека composer-installer для поддержки типов пакетов, отличных от композитора, т.е. application.. и т.д. Это только для того, чтобы добавить гибкость установки композиционных пакетов за пределы папки поставщика. Этот пакет поддерживает только типы пакетов composer,

https://getcomposer.org/doc/04-schema.md#type

Тип пакета. По умолчанию используется библиотека.

Типы пакетов используются для пользовательской логики установки. Если у вас есть пакет, который нуждается в специальной логике, вы можете определить нестандартный тип. Это может быть набор symfony, плагин wordpress или typo3-модуль. Эти типы будут специфичны для определенных проектов, и им необходимо будет предоставить установщик, способный устанавливать пакеты такого типа.

Как использовать

  • Включите плагин композитора в раздел composer.json require::
"require":{
    "php": ">=5.3",
    "mnsami/composer-custom-directory-installer": "1.1.*",
    "monolog/monolog": "*"
  }
  • В разделе extra укажите настраиваемый каталог, который вы хотите установить, в::
  "extra":{
    "installer-paths":{
      "./monolog/": ["monolog/monolog"]
    }

добавив часть installer-paths, вы сообщаете композитору установить пакет monolog внутри папки monolog в корневом каталоге.

  • В качестве добавленной новой функции мы добавили большую гибкость при определении каталога загрузки так же, как и composer/installers, другими словами, вы можете использовать переменные типа {$vendor} и {$name} в разделе installer-path:
"extra": {
    "installer-paths": {
        "./customlibs/{$vendor}/db/{$name}": ["doctrine/orm"]
    }
}

выше будет установлено пакет doctrine/orm в корневой папке вашего проекта под customlibs.

Примечание

Composer type: project не поддерживается в этом установщике, поскольку пакеты с типом project имеют смысл использовать только с оболочками приложений, такими как symfony/framework-standard-edition, которые потребуются другому пакету.

Ответ 4

Если вы обнаружите, что пользовательские инсталляторы композитора слишком сложны или жестки, и вы можете планировать, какие типы систем вы будете развертывать, вы можете использовать сценарии после установки.

Вот пример, который создает символическую ссылку из пакета, установленного поставщиками, в место, где он может ожидаться:

"scripts": {
    "post-install-cmd": [
        "test -d vendor/foo/bar && ln -s ../vendor/foo/bar lib/bar"
    ]
}

Это создаст символическую ссылку в lib/bar/, указывающую на vendor/foo/bar/.