必须删 vendor 子目录、清 Git 缓存、删 installed.json 并用 --no-cache update,否则 Composer 仍 symlink 旧文件或读缓存元数据;因 clear-cache 不清理这三处关键残留。

必须删 vendor 子目录 + 清 Git 缓存 + 重跑 update,否则 Composer 仍会 symlink 旧文件或读缓存元数据。
为什么 composer clear-cache 对本地包没用
因为 composer clear-cache 只清 ~/.composer/cache/files/ 和部分 provider 索引,完全不碰以下三处关键残留:
-
vendor/vendor/package目录下的 symlink 或已解压文件(它不会自动删) -
~/.composer/cache/vcs/里该包的 Git clone 快照(path 模式下 Composer 仍可能复用) - 项目
vendor/composer/installed.json中记录的旧 source 路径和版本(影响 autoload 生成)
强制刷新本地包的完整操作步骤
以本地包 myorg/my-package 为例,确保修改生效需同步清理四点:
- 删掉对应 vendor 子目录:
rm -rf vendor/myorg/my-package(Linux/macOS)或rmdir /s vendor\myorg\my-package(Windows) - 清 Git 缓存:
rm -rf ~/.composer/cache/vcs/*(Linux/macOS),Windows 下删%APPDATA%\Composer\Cache\vcs\* - 删本地状态快照:
rm -f vendor/composer/installed.json - 加
--no-cache重装:composer update myorg/my-package --no-cache
加 -vvv 运行可验证是否真重读:日志中应出现 Reading ./../my-package/composer.json,而非 Using version dev-main from cache。
path 仓库配置失效的常见排查点
即使执行了上述操作,若 composer show myorg/my-package 输出里没有 source: path ../my-package,说明配置未生效:
- 检查项目
composer.json的repositories字段是否为非空数组,且 type 是path、url 指向正确绝对/相对路径 - 确认本地包根目录有
composer.json,其name与主项目require中声明完全一致(含 vendor 名) - 若版本写
"dev-main",本地包 Git 分支名必须是main;master分支需改用"dev-master" - 避免
repositories块里混入其他源类型(如packagist),否则整个块会被忽略
Class not found?别只盯安装,要重建 autoload
path 包修改了类或 autoload 配置后报错,大概率不是没装上,而是自动加载器没更新:
- 运行
composer dump-autoload强制重生成vendor/autoload.php - 如果本地包用了
psr-4且改过命名空间映射,必须删vendor/composer/autoload_*.php再 dump - CI/CD 环境禁用 path 仓库:它依赖宿主机路径,Docker 构建时应改用真实 dist 包或 git 仓库
最易被忽略的是 installed.json 和 vcs 缓存——它们不随 clear-cache 清除,却直接决定 Composer 是否重新解析本地路径。不手动删,就永远在 symlink 旧状态。











