Я только что установил проект Symfony 4 и нашел этот раздел в composer.json:
"scripts": {
"auto-scripts": {
"cache:clear": "symfony-cmd",
"assets:install %PUBLIC_DIR%": "symfony-cmd"
},
"post-install-cmd": [
"@auto-scripts"
],
"post-update-cmd": [
"@auto-scripts"
],
...
Я обнаружил, что раздел auto-scripts обрабатывается Composer как-то иначе: ключ - это команда для bin/console, а значение - это "тип" команды (в данном случае это Symfony). Поскольку это не задокументировано на веб-сайте Composer, я предполагаю, что это недопустимое определение, но оно работает, и мой вопрос в том, как Composer знает, как выполнять такие команды? Как Composer знает, что такое symfony-cmd?




Я предполагаю, что он использует конфигурацию extra, расположенную в composer.json
"extra": {
"symfony-app-dir": "app",
"symfony-web-dir": "web",
"symfony-var-dir": "var",
"symfony-bin-dir": "bin",
"symfony-tests-dir": "tests",
...
},
Несколько дней назад, когда я переводил приложение с 2.8 на 3.4, у меня возникли проблемы с этими определениями.
Мне также пришлось очистить кеш композитора.
Хорошая догадка, но нет.
Это как говорит Cerad. auto-script анализируется Symfony / Flex, а «правая сторона» пары команда: исполняемый файл обрабатывается этот выключатель.
switch ($type) {
case 'symfony-cmd':
return $this->expandSymfonyCmd($cmd);
case 'php-script':
return $this->expandPhpScript($cmd);
case 'script':
return $cmd;
Поэтому документация Composer не может сказать ни слова об этом, поскольку она специфична для Symfony.
Лично мне не нравится смешивание стандартных разделов Composer с пользовательскими на корневом уровне composer.json. Это просто сбивает меня с толку и втягивает в безмолвную документацию Composer.
Само название, auto-script, должно быть лучше. Что-то менее волшебное и более понятное, например flex-script.
Это часть плагина композитора Symfony Flex, поэтому это законно. Я никогда не отслеживал, где именно он определен, но, вероятно, где-то в здесь. Это тот же код, который позволяет вам делать такие вещи, как «композитору требуется сервер» и другие магические действия.