composer 支持本地 git 仓库需手动注册为 type: “vcs” 的 repository,url 必须为绝对路径(windows 用 file:///c:/path,macos/linux 用 file:///users/path),目录须是已提交的合法 git 仓库,require 时用 dev-main 等开发分支名,并配合 –prefer-source 实时同步代码变更。

怎么让 composer 读取本地 Git 仓库(不是远程)
直接支持,但得绕过“远程”假定——composer 默认只认 https:// 或 git@ 地址,本地路径必须伪装成 Git 仓库并显式声明类型。
- 本地目录必须是合法 Git 仓库:进目录执行
git status要能正常返回,且至少有 1 次 commit(空仓库或未初始化会报fatal: not a git repository) - 在
composer.json的repositories里加一条 typevcs、url 填绝对路径(Windows 用file:///C:/path/to/repo,macOS/Linux 用file:///Users/xxx/repo) - 不能写相对路径,
./my-package或../packages/foo全部无效 - 如果本地仓库没打 tag,
require时只能用"dev-main"或"dev-master"(取决于默认分支名),不能写"1.0.0"
composer require 本地包时提示 “Could not find package”
不是路径错,而是 composer 没扫描到你的仓库——它不会自动发现本地文件夹,必须手动注册。
- 检查
repositories是否放在根composer.json(项目级),而不是 vendor 里的某个包里 - 确认
url值末尾不带.git(哪怕目录名含 .git 也不加,file:///xxx/my-pkg.git是错的) - 运行
composer diagnose,看输出里有没有 “Repo X is invalid” 提示;若有,大概率是路径不存在或非 Git 仓库 - 临时调试可加
-vvv参数:执行composer require vendor/name:dev-main -vvv,看日志里是否出现 “Loading repository from …” 及对应路径
为什么改了本地包代码,composer update 却不生效
因为 composer 默认把 VCS 包当成“不可变”的远程源,拉下来就缓存,不会监听本地文件变化。
- 开发中要实时生效,必须加
"--prefer-source":运行composer update vendor/name --prefer-source - 否则即使你改了本地仓库的代码,
composer仍可能从vendor/缓存或 zip 包加载旧版本 - 更彻底的办法是删掉
vendor/vendor/name和composer.lock里对应条目,再composer install - 注意:
--prefer-source会让composer每次都 clone(或 checkout)整个仓库,对大仓库略慢,但开发期值得
Windows 下 file:// 路径容易出错的点
斜杠方向、盘符大小写、空格和中文路径——三者任一出问题都会让 composer 静默失败或报奇怪错误(比如 failed to open dir)。
- 必须用正斜杠
/,不能用反斜杠;file://C:mypkg是非法 URL - 盘符必须小写:
file:///c:/my/pkg才有效,file:///C:/my/pkg在某些 PHP 版本下解析失败 - 路径含空格或中文?老老实实用英文路径,或者把整个仓库移到
C:/dev/pkg这类干净路径下——别指望 URL 编码能兜底 - 验证方式:把
file://地址粘贴进浏览器地址栏,看能否打开目录(只是辅助判断路径格式,不保证 composer 能用)
本地 VCS 本质是“骗” composer 把文件系统当 Git 服务用,所有限制都来自这个前提。路径权限、Git 状态、URL 格式,三个环节漏一个,就会卡在“找不到包”或“不更新”。