【问题标题】:Symfony 4 Composer scriptsSymfony 4 Composer 脚本
【发布时间】:2018-11-15 02:40:57
【问题描述】:

我刚刚安装了 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 部分的处理方式有所不同:key 是 bin/console 的命令,value 是命令“类型”(在本例中是 Symfony 的)。由于 Composer 网站上没有记录,我认为它不是合法定义,但它有效,我的问题是 Composer 如何知道如何执行这些命令? Composer 如何知道symfony-cmd 是什么?

【问题讨论】:

  • 它是 Symfony Flex 作曲家插件的一部分,所以它是合法的。我从来没有准确地找到它的定义位置,但可能在here 的某个地方。相同的代码可以让你做“composer require server”和其他魔法。

标签: symfony composer-php


【解决方案1】:

正如Cerad 所说。 auto-script 由 Symfony/Flex 解析,而 command:executable 对的“右侧”由 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

【讨论】:

    【解决方案2】:

    我猜它使用位于composer.jsonextra 配置

    "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 时,我在这些定义方面遇到了一些问题。

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

    【讨论】:

    • 猜对了,但不是。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-16
    • 2017-01-17
    • 1970-01-01
    • 2012-08-24
    • 2013-08-31
    • 1970-01-01
    相关资源
    最近更新 更多