【问题标题】:laravel add version to composer.json postAutoloadDump failslaravel 将版本添加到 composer.json postAutoloadDump 失败
【发布时间】:2018-09-03 15:40:39
【问题描述】:

我的 laravel 5.6 项目的 composer.json 没有“版本”说明符。

所以我添加到我的composer.json:

"version": "0.1.0"

之后,当我运行composer installcomposer update foo/barcomposer dump-autoload 时,出现以下错误:

> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover
PHP Fatal error:  Uncaught Error: Call to undefined method Symfony\Component\Process\ProcessUtils::escapeArgument() in phar:///usr/local/bin/composer/src/Composer/Util/ProcessExecutor.php:134
Stack trace:
#0 phar:///usr/local/bin/composer/src/Composer/EventDispatcher/EventDispatcher.php(260): Composer\Util\ProcessExecutor::escape('1')
#1 phar:///usr/local/bin/composer/src/Composer/EventDispatcher/EventDispatcher.php(232): Composer\EventDispatcher\EventDispatcher->getPhpExecCommand()
#2 phar:///usr/local/bin/composer/src/Composer/EventDispatcher/EventDispatcher.php(96): Composer\EventDispatcher\EventDispatcher->doDispatch(Object(Composer\Script\Event))
#3 phar:///usr/local/bin/composer/src/Composer/Autoload/AutoloadGenerator.php(312): Composer\EventDispatcher\EventDispatcher->dispatchScript('post-autoload-d...', true, Array, Array)
#4 phar:///usr/local/bin/composer/src/Composer/Installer.php(301): Composer\Autoload\AutoloadGenerator->dump(Object(Composer\Config), Object(Composer\Repository\InstalledFilesystemRepository), Object in phar:///usr/local/bin/composer/src/Composer/Util/ProcessExecutor.php on line 134

Fatal error: Uncaught Error: Call to undefined method Symfony\Component\Process\ProcessUtils::escapeArgument() in phar:///usr/local/bin/composer/src/Composer/Util/ProcessExecutor.php:134
Stack trace:
#0 phar:///usr/local/bin/composer/src/Composer/EventDispatcher/EventDispatcher.php(260): Composer\Util\ProcessExecutor::escape('1')
#1 phar:///usr/local/bin/composer/src/Composer/EventDispatcher/EventDispatcher.php(232): Composer\EventDispatcher\EventDispatcher->getPhpExecCommand()
#2 phar:///usr/local/bin/composer/src/Composer/EventDispatcher/EventDispatcher.php(96): Composer\EventDispatcher\EventDispatcher->doDispatch(Object(Composer\Script\Event))
#3 phar:///usr/local/bin/composer/src/Composer/Autoload/AutoloadGenerator.php(312): Composer\EventDispatcher\EventDispatcher->dispatchScript('post-autoload-d...', true, Array, Array)
#4 phar:///usr/local/bin/composer/src/Composer/Installer.php(301): Composer\Autoload\AutoloadGenerator->dump(Object(Composer\Config), Object(Composer\Repository\InstalledFilesystemRepository), Object in phar:///usr/local/bin/composer/src/Composer/Util/ProcessExecutor.php on line 134

当我删除 version 说明符时,一切都按预期工作。

这是我的 composer.json

{
    "name": "myvendor/myproject",
    "description": "",
    "keywords": [],
    "license": "MIT",
    "version": "0.1.0",
    "type": "project",
    "require": {
        "php": "^7.1.3",
        "fideloper/proxy": "^4.0",
        "laravel/framework": "5.6.*",
        "laravel/tinker": "^1.0"
    },
    "require-dev": {
        "barryvdh/laravel-ide-helper": "^2.4",
        "doctrine/dbal": "^2.6",
        "filp/whoops": "^2.0",
        "friendsofphp/php-cs-fixer": "^2.10",
        "fzaninotto/faker": "^1.4",
        "mockery/mockery": "^1.0",
        "nunomaduro/collision": "^2.0",
        "phpunit/phpunit": "^7.0"
    },
    "autoload": {
        "classmap": [
            "database/seeds",
            "database/factories"
        ],
        "psr-4": {
            "App\\": "app/"
        }
    },
    "autoload-dev": {
        "psr-4": {
            "Tests\\": "tests/"
        }
    },
    "extra": {
        "laravel": {
            "dont-discover": [
            ]
        }
    },
    "scripts": {
        "post-root-package-install": [
            "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
        ],
        "post-create-project-cmd": [
            "@php artisan key:generate"
        ],
        "post-autoload-dump": [
            "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
            "@php artisan package:discover"
        ]
    },
    "config": {
        "preferred-install": "dist",
        "sort-packages": true,
        "optimize-autoloader": true
    },
    "minimum-stability": "dev",
    "prefer-stable": true
}

所以它告诉我Symfony\Component\Process\ProcessUtils::escapeArgument 是未定义的。我还找到了https://github.com/laravel/framework/issues/21281https://github.com/eyewitness/eye/issues/8,但我无法将它们放在一起来解决问题。

同样,当我从 composer.json 中删除 version 时,问题就消失了。

【问题讨论】:

    标签: laravel composer-php


    【解决方案1】:

    原来错误是我使用的composer版本引起的。

    我使用的是 laradock 环境,composer --verison1.5.5。将composer更新为1.6.3后,问题就消失了。

    但是,如果你遇到同样的问题,你很可能会遇到同样的困难,在 laradock 的工作区容器中更新 composer。你不能简单地在那里composer selfupdate,因为由于权限设置,作曲家将临时文件移动到/usr/local/bin 时会遇到问题。

    我通过将以下部分添加到我的 laradock/workspace/Dockerfile-72 来修复它:

    #####################################
    # Composer:
    #####################################
    
    ## FIX laradock/workspace permission problem
    
    USER root
    
    RUN rm /usr/local/bin/composer
    
    USER laradock
    
    RUN cd /home/laradock && php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" && \
        php -r "if (hash_file('SHA384', 'composer-setup.php') === '544e09ee996cdf60ece3804abc52599c22b1f40f4323403c44d44fdfdd586475ca9813a858088ffbc1f233e9b180f061') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" && \
        php composer-setup.php && \
        php -r "unlink('composer-setup.php');"
    
    USER root 
    
    RUN mv /home/laradock/composer.phar /usr/local/bin/composer
    
    ## ENDFIX
    

    我想,问题是,https://github.com/laradock/workspace/blob/master/Dockerfile-72 不执行 composer-setup.php(请参阅此处@Raaghu 的答案:permission denied for composer in /usr/local/bin/)。

    也许只需将其添加到 laradock/workspace Dockerfile 即可更轻松地解决问题:

    USER root
    
    RUN chown laradock:laradock /usr/local/bin/composer
    

    但我没有测试这个设置,我不确定。

    【讨论】:

      猜你喜欢
      • 2018-08-09
      • 1970-01-01
      • 1970-01-01
      • 2021-07-08
      • 2021-07-19
      • 1970-01-01
      • 2018-04-06
      • 2021-06-11
      • 2016-08-31
      相关资源
      最近更新 更多