Symfony 4 Composer脚本

10
我刚安装了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"
    ],
...

我发现Composer在处理auto-scripts部分时与其他部分有所不同:键是对bin/console命令的引用,值是一个"类型"命令(在这种情况下是Symfony的)。由于Composer网站上没有文档记录这一点,我认为这不是合法的定义,但它确实有效。我的问题是,Composer如何知道执行这些命令?Composer如何知道symfony-cmd是什么?


4
它是Symfony Flex composer插件的一部分,因此是合法的。我从来没有追查过它的确切定义位置,但可能在这里的某个地方。这是相同的代码,让你能够像“composer require server”和其他魔法一样操作。 - Cerad
2个回答

10

正如Cerad所说的那样,auto-script由Symfony/Flex解析,并且命令:可执行文件对的右侧由这个switch-case处理。

switch ($type) {
    case 'symfony-cmd':
        return $this->expandSymfonyCmd($cmd);
    case 'php-script':
        return $this->expandPhpScript($cmd);
    case 'script':
        return $cmd;

因此,Composer文档无法对此进行说明,因为它是特定于Symfony的。
个人不喜欢在composer.json根级别上将标准Composer段与自定义段混合在一起。这只会让我感到困惑,并且让我陷入了沉默的Composer文档中。 此外,命名本身应更好地解释清楚,例如'flex-script',而不是像'auto-script'这样过于神秘的名称。

0

我猜它使用位于composer.json中的extra配置

"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时,我遇到了一些关于这些定义的问题。
我还不得不清除composer的缓存。

2
猜得不错,但不是。 - Cerad

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