composer怎么使用本地git仓库_composer vcs本地路径配置【开发】

1次阅读

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

composer怎么使用本地git仓库_composer vcs本地路径配置【开发】

怎么让 composer 读取本地 Git 仓库(不是远程)

直接支持,但得绕过“远程”假定——composer 默认只认 https://git@ 地址,本地路径必须伪装成 Git 仓库并显式声明类型。

  • 本地目录必须是合法 Git 仓库:进目录执行 git status 要能正常返回,且至少有 1 次 commit(空仓库或未初始化会报 fatal: not a git repository
  • composer.jsonrepositories 里加一条 type vcs、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/namecomposer.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 格式,三个环节漏一个,就会卡在“找不到包”或“不更新”。

text=ZqhQzanResources