#php #laravel #composer-php
#git #композитор-php
Вопрос:
У меня есть проект composer без кода, но со списком зависимостей. Я хочу запустить composer install
для загрузки все зависимые пакеты и запустить несколько команд bash в каждом из них после этого.
Мой composer.json:
{
"name": "testmain/testmain",
"description": "testmain",
"minimum-stability": "dev",
"repositories": [{
"type": "package",
"package": {
"name": "testsub/testsub1",
"description": "testsub/testsub1",
"version": "master",
"source": {
"url": "https://github.com/testsub/testsub1",
"type": "git",
"reference": "master"
},
"scripts": {
"post-install-cmd": [
"make",
"make install"
]
}
}
},
{
"type": "package",
"package": {
"name": "testsub/testsub2",
"description": "testsub/testsub2",
"version": "master",
"source": {
"url": "https://github.com/testsub/testsub2",
"type": "git",
"reference": "master"
},
"scripts": {
"post-install-cmd": [
"make",
"make install"
]
}
}
}
],
"require": {
"testsub/testsub1": "master",
"testsub/testsub2": "master"
}
}
Проблема заключается в запущенной scripts
последовательности вложенных пакетов, все скрипты игнорируются composer.
Спасибо!
Комментарии:
1. Создание плагина composer может быть вашим лучшим вариантом здесь: getcomposer.org/doc/articles/plugins.md#creating-a-plugin
Ответ №1:
К сожалению, невозможно выполнить какие-либо некорневые скрипты (в смысле некорневые composer.json
), как указано в документации:
Примечание: выполняются только сценарии, определенные в composer.json корневого пакета. Если зависимость корневого пакета определяет свои собственные сценарии, Composer не выполняет эти дополнительные сценарии.
Ответ №2:
Как заявил Томас, невозможно автоматически вызывать некорневые скрипты. Но вы можете разрешить пользователю вызывать их вручную. Это применимо не во всех ситуациях, но хорошо в других.
Если у вас есть следующее в vendor/johndoe/mypackage/composer.json
:
"scripts": {
"nameOfScript": "\johndoe\mypackage\Scripts::invoke"
}
В composer.json
вашем корневом каталоге поместите следующее:
"scripts": {
"myFancyScript": [
"@putenv COMPOSER=vendor/johndoe/mypackage/composer.json",
"@composer nameOfScript"
]
}
Затем пользователь может вызвать composer myFancyScript
из вашего корневого каталога, и статическая функция invoke()
в пакете johndoe/mypackage
выполняется.