迁移后报“Package not found”主因是repositories配置失效、packagist.org未禁用、vendor路径或权限异常;应检查composer.json中{"packagist.org": false}是否独立且在repositories末尾,运行composer config repositories确认无https://repo.packagist.org,并执行composer dump-autoload -o重建自动加载。

迁移后报“Package not found”,基本不是包丢了,而是 Composer 根本没去你期望的源里找——repositories 配置失效、packagist.org 没关、或路径/权限导致 vendor 无法被识别。
为什么迁移后 vendor 目录存在却 still not found
直接复制 vendor 目录到新服务器后仍报错,常见原因有:
-
composer.json里没保留repositories配置,私有源地址丢失,Composer 回退查官方源(而包不在那里) -
composer.lock被修改或损坏,dist URL 或 shasum 不匹配,Composer 拒绝加载缓存或本地 vendor - 新服务器 PHP 版本或扩展缺失(如
mbstring、openssl),导致 autoload 生成失败,vendor/autoload.php实际不可用 - 文件权限问题:Linux 下若
vendor/所属用户与 Web 进程不一致,某些 autoloader 逻辑会静默跳过扫描
如何让已有的 vendor 目录重新被识别
别删 vendor、也别重装——先让它“活”起来:
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 运行
composer dump-autoload -o强制重建自动加载映射,它会读取当前vendor-dir值并刷新vendor/autoload.php - 确认
vendor-dir配置未被意外覆盖:执行composer config vendor-dir,输出应为vendor(默认值);若返回其他路径,说明composer.json里写了"vendor-dir",需同步调整代码中require 'vendor/autoload.php'的路径 - 检查
vendor/composer/autoload_classmap.php是否可读、非空;若为空,说明上一步 dump 失败,大概率是 PHP 扩展缺失或内存不足 - 临时加
--no-plugins --no-scripts运行composer install --dry-run,看是否能解析依赖树而不报错——这能快速验证 lock 文件和 vendor 结构是否自洽
repositories 配置必须生效才管用
私有包或镜像源在迁移后常“失联”,关键在配置写法和顺序:
-
composer.json中repositories数组必须包含{"packagist.org": false},且它得是**独立对象、放在数组末尾**,例如:
"repositories": [
{"type": "composer", "url": "https://pkg.myorg.com/"},
{"packagist.org": false}
]
- 写成
"packagist": false或嵌套在其他仓库对象里,会被完全忽略 - 运行
composer config repositories,输出里**不能出现https://repo.packagist.org**;如果还有,说明{"packagist.org": false}没生效,vendor 里的私有包永远不会被加载 - VCS 类型仓库(如 Git)要确保
type明确写"vcs",URL 必须是可git clone的裸地址(结尾只能是.git,不能带#main或路径)
离线环境 vendor 路径“漂移”的修复点
如果你是从一台机器打包 vendor 到另一台(尤其跨平台),这些细节容易被忽略:
- 源机必须用
composer install --no-dev --optimize-autoloader生成 vendor,否则 symlink 或 dev-only 文件可能污染结构 - 目标机执行
composer dump-autoload -o后,检查vendor/autoload.php开头几行,确认$vendorDir变量指向的是当前目录下的vendor,而不是旧路径 - 某些插件(如
hirak/prestissimo)会在 vendor 中写入绝对路径缓存,迁移后需删掉vendor/composer/installed.json并重跑dump-autoload - IDE(如 PhpStorm)可能缓存了旧 vendor 路径,需手动 File → Reload project from Disk 或清空索引
真正卡住的往往不是 vendor 存不存在,而是 Composer 在哪一层“认出它来”——从 repositories 加载元数据,到 composer.lock 校验哈希,再到 autoload.php 解析路径,任一环断开都会表现为 “package not found”。

















