Как да получите множество директории на доставчици с composer?

Моят проект разчита на ZF и на JS библиотека. Исках да мога да разположа ZF библиотеката на нормалното място (доставчик/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
Харесвам това решение, но ще приема моето, тъй като документите за composer казват, че трябва да се направи, когато искам да инсталирам определени пакети извън папката на доставчика. - person ddelrio1986; 13.08.2012
comment
Може да не съм го казал ясно, но точно това имах предвид. Все пак забравих да спомена инсталаторите на композитора. Радвам се, че работи! - person Jakub Zalas; 13.08.2012
comment
Освен това за такава проста задача като копиране/свързване можете да използвате скриптове: getcomposer.org/doc/ articles/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-bundle, wordpress-plugin или typo3-module. Всички тези типове ще бъдат специфични за определени проекти и ще трябва да осигурят инсталатор, способен да инсталира пакети от този тип.

Как да използвам

  • Включете плъгина за композитор в раздела 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