Laravel执行composer install报错:An option shortcut cannot be empty
Laravel 7执行composer install及artisan命令报错:"An option shortcut cannot be empty"
问题现象
- 执行
composer install时,先出现PSR-4自动加载警告:Class Modules\Tests\ThumbnailTest located in ./Modules/Media/Tests/ThumbnailTest.php does not comply with psr-4 autoloading standard. Skipping. - 随后执行
php artisan package:discover --ansi时抛出错误:An option shortcut cannot be empty.,导致composer脚本执行失败,错误码1 - 所有artisan命令均返回相同的"An option shortcut cannot be empty"错误
- 近期刚按升级指南将项目升级至Laravel 7,错误堆栈未明确指向具体问题,项目停滞
环境信息
- Laravel版本:7.2
- PHP版本:7.2
- 系统:Ubuntu
错误堆栈日志
[2024-02-01 08:39:00] local.ERROR: An option shortcut cannot be empty. {"exception":"[object] (Symfony\\Component\\Console\\Exception\\InvalidArgumentException(code: 0): An option shortcut cannot be empty. at /home/myproject/vendor/symfony/console/Input/InputOption.php:85) [stacktrace] #0 /home/myproject/vendor/symfony/console/Command/Command.php(459): Symfony\\Component\\Console\\Input\\InputOption->__construct() #1 /home/myproject/vendor/laravel/framework/src/Illuminate/Console/Concerns/HasParameters.php(32): Symfony\\Component\\Console\\Command\\Command->addOption() #2 /home/myproject/vendor/laravel/framework/src/Illuminate/Console/Command.php(85): Illuminate\\Console\\Command->specifyParameters() #3 [internal function]: Illuminate\\Console\\Command->__construct() #4 /home/myproject/vendor/laravel/framework/src/Illuminate/Container/Container.php(849): ReflectionClass->newInstanceArgs() #5 /home/myproject/vendor/laravel/framework/src/Illuminate/Container/Container.php(691): Illuminate\\Container\\Container->build() #6 /home/myproject/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(796): Illuminate\\Container\\Container->resolve() #7 /home/myproject/vendor/laravel/framework/src/Illuminate/Container/Container.php(637): Illuminate\\Foundation\\Application->resolve() #8 /home/myproject/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(781): Illuminate\\Container\\Container->make() #9 /home/myproject/vendor/laravel/framework/src/Illuminate/Console/Application.php(261): Illuminate\\Foundation\\Application->make() #10 /home/myproject/vendor/laravel/framework/src/Illuminate/Console/Application.php(275): Illuminate\\Console\\Application->resolve() #11 /home/myproject/vendor/laravel/framework/src/Illuminate/Support/ServiceProvider.php(333): Illuminate\\Console\\Application->resolveCommands() #12 /home/myproject/vendor/laravel/framework/src/Illuminate/Console/Application.php(152): Illuminate\\Support\\ServiceProvider->Illuminate\\Support\\{closure}() #13 /home/myproject/vendor/laravel/framework/src/Illuminate/Console/Application.php(75): Illuminate\\Console\\Application->bootstrap() #14 /home/myproject/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(330): Illuminate\\Console\\Application->__construct() #15 /home/myproject/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(129): Illuminate\\Foundation\\Console\\Kernel->getArtisan() #16 /home/myproject/artisan(37): Illuminate\\Foundation\\Console\\Kernel->handle() #17 {main} "}
解决步骤
1. 修复PSR-4自动加载警告
打开项目根目录的composer.json,检查autoload-dev节点下的PSR-4配置,确保Modules\Media\Tests对应的路径正确。示例配置如下:
"autoload-dev": { "psr-4": { "Modules\\Media\\Tests\\": "Modules/Media/Tests/" } }
保存后执行composer dump-autoload更新自动加载规则,消除警告。
2. 解决"An option shortcut cannot be empty"错误
这个错误是因为某个Artisan命令在定义选项时传入了空的快捷参数(shortcut),按以下步骤排查:
- 检查项目中所有自定义Artisan命令(继承
Illuminate\Console\Command的类),查看$options属性或configure()方法中的选项定义,找到类似['name' => 'xxx', 'shortcut' => '', ...]的配置,删除空的shortcut字段,或者设置为单个有效字符(比如'shortcut' => 'x') - 若排查自定义命令无果,检查近期升级或安装的第三方包,查看是否是包内命令的问题,可尝试回退包版本或查看包的官方issue
- 手动清除缓存:删除
bootstrap/cache目录下的所有文件,避免缓存的错误配置导致问题 - 检查
app/Console/Kernel.php中注册的命令列表,确认没有错误的选项定义
内容的提问来源于stack exchange,提问作者surya kumar
相关产品推荐
相关产品推荐

