Моят проект разчита на ZF и на JS библиотека. Исках да мога да разположа ZF библиотеката на нормалното място (доставчик/zendframework/zendframework1), но след това да разположа моята JS библиотека някъде другаде (public/my-vendor/my-library). Има ли как да се направи това?
Как да получите множество директории на доставчици с composer?
Отговори (3)
Composer е предназначен да управлява вашите PHP зависимости, а не JS.
Освен това поддържа само една папка на доставчика.
Може да следвате начина, по който се използват пакетите на Symfony:
- инсталирайте всичко в доставчика
- свържете (или копирайте) публични активи към публична директория като част от вашия процес на внедряване
Според мен е по-безопасно от инсталирането на нещо в публична папка (стига да копирате/свързвате само публична част от библиотека).
Попаднах на идеята за символна връзка, но исках да автоматизирам това, вместо да създавам ръчно символните връзки. Щях да създам скрипт за композиране, за да създам символната връзка. След това открих, че символните връзки на Windows и *nix трябва да бъдат създадени по различни начини, което направи това решение да става все по-объркано с всяка секунда. Открих, че в документите на композитора се говори за същия тип проблем на страницата за персонализирани инсталатори и се казва, че за да разрешите това, трябва да създадете свой собствен персонализиран инсталатор.
- Секция със съответните документи: http://getcomposer.org/doc/articles/custom-installers.md
- Моят персонализиран инсталатор: https://github.com/ddelrio1986/zf1-public-asset-installer
Внедрих този плъгин за композитор, за да инсталирам пакети в потребителски (персонализирани) дефинирани папки, можете просто да го включите във вашия 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
, за да се изискват от друг пакет.