Как получить несколько каталогов поставщиков с композитором?

Мой проект основан на ZF и библиотеке JS. Я хотел иметь возможность развернуть библиотеку ZF в обычном месте (vendor/zendframework/zendframework1), а затем развернуть мою библиотеку JS в другом месте (public/my-vendor/my-library). Есть какой-либо способ сделать это?


person ddelrio1986    schedule 12.08.2012    source источник


Ответы (3)


Composer предназначен для управления вашими зависимостями PHP, а не JS.

Кроме того, он поддерживает только одну папку поставщика.

Вы можете следовать тому, как используются пакеты Symfony:

  • установить все в вендоре
  • связать (или скопировать) общедоступные ресурсы в общедоступный каталог в рамках процесса развертывания.

На мой взгляд, это безопаснее, чем устанавливать что-либо в общедоступную папку (при условии, что вы копируете/связываете только общедоступную часть библиотеки).

person Jakub Zalas    schedule 13.08.2012
comment
Очень много +1 за предложение символической ссылки, это был бы мой предпочтительный способ работы! - person Berry Langerak; 13.08.2012
comment
Мне нравится это решение, но я собираюсь принять свое, поскольку это то, что говорится в документах для композитора, если вы хотите установить определенные пакеты за пределами папки поставщика. - person ddelrio1986; 13.08.2012
comment
Возможно, я не совсем ясно выразился, но я имел в виду именно это. Забыл упомянуть установщики композитора. Рад, что это работает! - person Jakub Zalas; 13.08.2012
comment
Также для такой простой задачи, как копирование/ссылка, можно использовать скрипты: getcomposer.org/doc/ статьи/scripts.md - person Jakub Zalas; 13.08.2012

Я столкнулся с идеей символической ссылки, но я хотел автоматизировать ее, а не создавать символические ссылки вручную. Я собирался создать скрипт композитора для создания символической ссылки. Затем я обнаружил, что символические ссылки в Windows и * nix нужно создавать по-разному, что сделало это решение более запутанным с каждой секундой. Я обнаружил, что в документах композитора они говорят об этом же типе проблемы на странице пользовательских установщиков и говорят, что для ее решения необходимо создать собственный пользовательский установщик.

person ddelrio1986    schedule 13.08.2012

Я реализовал этот плагин для композитора для установки пакетов в пользовательские (настраиваемые) папки, которые вы можете просто включить в свой composer.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, которые потребуются другим пакетом.

person mina.nsami    schedule 06.02.2014