sh: symfony-cmd: command not found。

14

我将一个Symfony 5.2应用程序模板降级为使用Symfony 4.4,以便允许使用一些需要较旧版本Symfony的库。问题是,当我执行composer install时,在安装的最后出现以下错误:

sh: symfony-cmd: command not found

看起来安装大部分都成功了,因为我的vendor文件夹已经被创建并填充了。但我还是担心这个错误。

这个错误是什么意思?我该如何解决它?

====

编辑:这是我的composer.json文件:

{
    "type": "project",
    "license": "proprietary",
    "minimum-stability": "dev",
    "prefer-stable": true,
    "require": {
        "php": ">=7.4.0",
        "ext-ctype": "*",
        "ext-iconv": "*",
        "ext-json": "*",
        "composer/package-versions-deprecated": "1.11.99.1",
        "cweagans/composer-patches": "^1.7",
        "doctrine/doctrine-bundle": "^2.4",
        "doctrine/doctrine-migrations-bundle": "^3.1",
        "doctrine/orm": "^2.9",
        "phpdocumentor/reflection-docblock": "*",
        "sensio/framework-extra-bundle": "*",
        "symfony/framework-bundle": "4.4.*",
        "symfony/http-client": "*",
        "symfony/intl": "*",
        "symfony/mailer": "*",
        "symfony/mime": "*",
        "symfony/monolog-bundle": "^3.1",
        "symfony/notifier": "*",
        "symfony/process": "*",
        "symfony/property-access": "*",
        "symfony/property-info": "*",
        "symfony/proxy-manager-bridge": "*",
        "symfony/security-bundle": "*",
        "symfony/serializer": "*",
        "symfony/string": "*",
        "symfony/translation": "*",
        "symfony/twig-bundle": "*",
        "symfony/validator": "*",
        "symfony/web-link": "*",
        "symfony/yaml": "*",
        "twig/extra-bundle": "*",
        "twig/twig": "*"
    },
    "require-dev": {
        "doctrine/doctrine-fixtures-bundle": "^3.4",
        "roave/security-advisories": "dev-master",
        "symfony/browser-kit": "*",
        "symfony/css-selector": "*",
        "symfony/debug-bundle": "*",
        "symfony/maker-bundle": "*",
        "symfony/phpunit-bridge": "*",
        "symfony/stopwatch": "*",
        "symfony/var-dumper": "*",
        "symfony/web-profiler-bundle": "*",
        "vimeo/psalm": "^4.9"
    },
    "config": {
        "optimize-autoloader": true,
        "preferred-install": {
            "*": "dist"
        },
        "sort-packages": true
    },
    "autoload": {
        "psr-4": {
            "App\\": "src/"
        }
    },
    "autoload-dev": {
        "psr-4": {
            "App\\Tests\\": "tests/"
        }
    },
    "replace": {
        "symfony/polyfill-ctype": "*",
        "symfony/polyfill-iconv": "*",
        "symfony/polyfill-php72": "*"
    },
    "scripts": {
        "auto-scripts": {
            "cache:clear": "symfony-cmd",
            "assets:install %PUBLIC_DIR%": "symfony-cmd"
        },
        "post-install-cmd": [
            "@auto-scripts"
        ],
        "post-update-cmd": [
            "@auto-scripts"
        ]
    },
    "conflict": {
        "symfony/symfony": "*"
    },
    "extra": {
        "symfony": {
            "allow-contrib": false,
            "require": "5.2.*"
        },
        "patches": {
            "symfony/maker-bundle": {
                "Provide flag to force annotation in make entity command": "https://raw.githubusercontent.com/vklux/maker-bundle-force-annotation/master/maker-force-annotation-flag.patch"
            }
        }
    }
}
4个回答

31

如果您已经安装了symfony/flex软件包但仍然出现错误,请确保当运行composer时,symfony/flex软件包被允许执行代码。

这是因为自Composer 2.2.0以来,allow-plugins选项增加了一层安全性,使您可以限制哪些Composer插件可以在启动时执行代码。

因此,请确保您的composer.json文件中的allow-plugins配置中有适当的行。

"config": { 
    // other config...

    "allow-plugins": {
        "symfony/flex": true
    }
},

1
这个解决了!谢谢! - eltomato
1
这对我也起了作用。我还必须在允许的插件列表中添加"symfony/runtime": true - Martin

18

symfony-cmd 是 Symfony Flex 的一部分。你的 composer.json 文件中没有包含对 Flex 的要求,因此运行 composer require symfony/flex 可能会解决这个问题。


1
虽然我在使用composer require时遇到了一些递归问题,但将该要求添加到composer.json文件中就足以解决这个问题。谢谢! - Mayor of the Plattenbaus

5

虽然将symfony/flex添加到项目中是一种解决方案,但请记住Flex是可选的。如果您想要在不安装Flex的情况下消除错误,则可以从您的composer.json中删除symfony-cmd命令引用。

更改前:

    "scripts": {
        "auto-scripts": {
            "cache:clear": "symfony-cmd",
            "assets:install %PUBLIC_DIR%": "symfony-cmd"
        },
        "post-install-cmd": [
            "@auto-scripts"
        ],
        "post-update-cmd": [
            "@auto-scripts"
        ]
    },

之后:

    "scripts": {
        "auto-scripts": {},
        "post-install-cmd": [],
        "post-update-cmd": []
    },

1

我遇到了一个特殊情况,旧的部署脚本在我的composer命令中添加了--no-plugins。删除它解决了我使用deployer v6的问题。

set('composer_options', '{{composer_action}} --verbose --prefer-dist --no-progress --no-interaction --no-dev --optimize-autoloader');

显然,你需要插件才能让flex工作,我假设由于脚本块有一些命令,你也需要它。因此,没有脚本/插件将破坏你的安装。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接