应运行 composer dump-autoload(可加 -o 优化),该命令仅读取本地 composer.json 和文件系统,不依赖网络,可重建 PSR-4 映射;需确保 vendor 完整、autoload 配置正确、命名空间与文件路径严格匹配。

composer install 时提示 Could not fetch packages 怎么办
没网络时 composer install 必然失败,因为默认会连 Packagist 拉包元数据和 ZIP。但 PSR-4 映射本身不依赖网络——它只是 autoload 配置 + 文件系统路径的映射关系。关键在:你得先有代码文件,再让 Composer “认出来”。
- 确保
vendor/目录已存在(从有网机器完整拷贝过来,含vendor/autoload.php和所有包代码) -
composer.json中的"autoload"或"autoload-dev"段必须已正确定义,例如:"autoload": { "psr-4": { "App\": "src/" } } - 别动
vendor/composer/autoload_psr4.php—— 这个文件是composer dump-autoload生成的,只要 vendor 完整,它就有效
手动触发 PSR-4 映射重建用哪个命令
用 composer dump-autoload,不是 install 或 update。这个命令只读本地 composer.json 和文件系统,不发任何网络请求。
- 运行前确认
src/(或你配置的命名空间路径)目录真实存在且结构符合 PSR-4 规则(如AppFooBar对应src/Foo/Bar.php) - 加
-o参数可生成优化后的静态映射(vendor/composer/autoload_static.php),加载更快,适合生产环境 - 如果改过
composer.json的 autoload 配置,必须重新运行,否则旧映射仍生效
为什么 dump-autoload 后类还是找不到
常见原因不是命令没跑,而是路径或命名空间对不上。PSR-4 映射是严格字符串前缀匹配 + 目录拼接,容错率极低。
- 检查
composer.json里"App\"结尾的反斜杠是否漏了——少一个就完全不匹配 - 确认 PHP 文件里
namespace声明和composer.json中键名完全一致(大小写敏感,app\≠App\) - 文件后缀必须是
.php;Bar.php可以,Bar.PHP或Bar.php.txt不行 - 如果用了子目录(如
"App\Http\": "src/Http/"),src/Http/下不能有index.php这类非命名空间文件干扰扫描
无网络下怎么验证映射是否生效
最直接的办法:用 composer show --platform 看 autoload 配置是否被读取,再用 PHP 代码实际 require 自动加载器测试。
- 运行
composer dump-autoload -v,看输出里有没有类似Generated autoload files...和具体映射条目 - 临时写个测试脚本:
<?php require 'vendor/autoload.php'; var_dump(class_exists('AppFooBar'));返回true才算真正通了 - 注意:如果类文件里有语法错误,
class_exists()也会返回false,别误判成映射问题










