Symfony 4 Composer脚本

时间:2018-06-05 14:48:48

标签: symfony composer-php

我刚刚安装了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部分:key是bin/console的命令,value是命令" type" (在这种情况下,它的Symfony' s)。由于未在Composer网站上记录,我认为它不是法律定义,但它有效,我的问题是Composer如何知道如何执行这些命令? Composer如何知道symfony-cmd是什么?

2 个答案:

答案 0 :(得分:0)

我猜它使用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时,我对这些定义有些麻烦。

我还必须清除作曲家的缓存。

答案 1 :(得分:0)

就像Cerad所说的那样。 auto-script由Symfony / Flex解​​析,命令的“右侧”:可执行对由this 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文档中。 同样,命名本身auto-script应该更好。诸如flex-script之类的魔术性更强的东西。