Symfony 4 Composer 脚本

spa*_*jak 8 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"
    ],
...
Run Code Online (Sandbox Code Playgroud)

我发现auto-scriptsComposer 以某种方式处理了该部分:key 是一个命令bin/console,value 是一个命令“类型”(在这种情况下它是 Symfony 的)。由于它没有在 Composer 网站上记录,我认为它不是法律定义,但它有效,我的问题是 Composer 如何知道如何执行这些命令?Composer 怎么知道是什么symfony-cmd

小智 7

正如塞拉德所说。auto-script由 Symfony/Flex 解析,并且 command:executable 对的“右侧”由这个 switch-case 处理

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

因此,Composer 文档对此一言不发,因为它是特定于 Symfony 的。

我个人不喜欢在 composer.json 根级别将标准 Composer 部分与自定义部分混合。它只是让我感到困惑并将我吸引到无声的 Composer 文档中。此外,命名本身auto-script应该更好。一些不那么神奇但更不言自明的东西,比如flex-script.


Oma*_*ves 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",

    ...
},
Run Code Online (Sandbox Code Playgroud)

几天前,当我将应用程序从 2.8 迁移到 3.4 时,我在这些定义方面遇到了一些麻烦。

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

  • 猜测不错,但不是。 (2认同)