Скрипты Symfony 4 Composer

Я только что установил проект 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?

Это часть плагина композитора Symfony Flex, поэтому это законно. Я никогда не отслеживал, где именно он определен, но, вероятно, где-то в здесь. Это тот же код, который позволяет вам делать такие вещи, как «композитору требуется сервер» и другие магические действия.

Cerad 05.06.2018 17:15
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
8
1
2 267
2

Ответы 2

Я предполагаю, что он использует конфигурацию 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 05.06.2018 17:17

Это как говорит 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.

Другие вопросы по теме