更换环境更新Composer后执行update/install出现未知错误求助
更换主机与开发容器后,Composer升级至2.4.2版本。执行composer update或删除锁文件后执行composer install时,出现如下错误:
> Illuminate\Foundation\ComposerScripts::postAutoloadDump > @php artisan package:discover --ansi <comment>In LoadConfiguration.php line 66:</comment> <error> </error> <error> </error> <error> </error>
但直接运行php artisan package:discover --ansi完全正常。已排查:.env文件格式正确(LF换行、特殊字符变量用双引号包裹),重命名vendor重新安装依赖无效,PHP降级至8.0.2问题依旧。composer diagnose结果仅提示Git版本(2.17.1)过旧,其余检测正常。
查看完整错误详情
直接查看Laravel错误日志文件storage/logs/laravel.log,里面会记录LoadConfiguration.php第66行对应的具体报错信息,比如配置文件语法错误、未定义的环境变量等,以此定位核心问题。验证Composer执行上下文的环境变量
Composer执行脚本时的环境可能与终端直接运行artisan不同,可临时修改composer.json的post-autoload-dump脚本,先打印环境变量验证:"scripts": { "post-autoload-dump": [ "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", "@php -r \"var_dump(getenv('APP_ENV'), file_exists(base_path('.env')));\"", "@php artisan package:discover --ansi" ] }执行
composer install后,检查输出的环境变量是否正确,确认.env文件是否被Composer脚本正确加载。排查自动发现的包
临时禁用所有包的自动发现,在composer.json中添加:"extra": { "laravel": { "dont-discover": ["*"] } }执行
composer install,若报错消失,再逐个移除dont-discover中的包,重新执行命令,定位导致问题的具体包。检查LoadConfiguration.php代码逻辑
找到vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/LoadConfiguration.php第66行,查看对应代码段:- 若为加载配置文件的逻辑,检查
config/目录下所有文件是否存在语法错误(比如数组闭合错误、未定义常量等) - 若为.env解析逻辑,确认.env文件中是否有隐藏的特殊字符(比如不可见的Unicode字符)
- 若为加载配置文件的逻辑,检查
升级Git版本
按照composer diagnose提示,将Git升级至2.24及以上版本,旧版本可能导致依赖安装时的文件同步问题,升级后重新执行composer install。清除配置缓存
执行以下命令清除配置缓存后,再尝试Composer命令:php artisan config:clear php artisan cache:clear
内容的提问来源于stack exchange,提问作者Valentino

