【发布时间】:2018-09-03 15:40:39
【问题描述】:
我的 laravel 5.6 项目的 composer.json 没有“版本”说明符。
所以我添加到我的composer.json:
"version": "0.1.0"
之后,当我运行composer install、composer update foo/bar 或composer 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/21281 和https://github.com/eyewitness/eye/issues/8,但我无法将它们放在一起来解决问题。
同样,当我从 composer.json 中删除 version 时,问题就消失了。
【问题讨论】:
标签: laravel composer-php