path仓库能避开所有私有源访问限制,因其让Composer直接将本地目录当包使用,不发起任何网络请求,故绕过HTTP/Git协议、鉴权、代理、证书及Git配置等全部远程交互环节。

直接用 path 类型仓库绕过网络鉴权,是最稳妥的本地调试方案——它不走 HTTP/Git 协议,不触发 401/403/SSH 超时,也不依赖 Git 配置或 auth.json。
为什么 path 仓库能避开所有私有源访问限制
path 仓库让 Composer 直接把本地目录当包用,跳过所有远程交互环节。Git 克隆卡住、HTTPS 证书报错、GitLab Token 失效、公司代理拦截、secure-http 配置冲突……这些全不生效。因为根本没发请求。
- 不调用
git clone,所以http.proxy、sslVerify、SSH key 等配置完全无关 - 不走 HTTP 下载,
auth.json、github-oauth、gitlab-token全部被忽略 - 不查
packages.json,Packagist 镜像、Satis 源、vcs 类型仓库配置统统无效
repositories 配置必须写对这三处
错一个字符,Composer 就静默跳过,然后报 Could not find package。
-
url必须是相对于项目根目录的路径,且不能以/结尾("./packages/my-pkg"✅,"./packages/my-pkg/"❌) -
type必须是"path"(不是"local"、"dir"或留空) - 该路径下必须存在合法
composer.json,且其中name字段要和require中写的**逐字一致**("acme/utils"≠"Acme/utils")
require 时版本号只能写 dev-xxx,不能写语义化版本
path 仓库不解析 ^1.0 或 ~2.3,只认分支别名。写错就匹配失败。
- 本地包没 Git 仓库?先
git init && git add . && git commit -m "init",再设"version": "dev-main" - require 写成
"acme/utils": "dev-main",不是"dev-master"(除非分支真叫 master) - 必须加
"minimum-stability": "dev"到项目顶层,否则dev-main被过滤掉
改了本地代码,vendor 里为啥没变
默认是复制(copy),不是链接(symlink)。改源码 ≠ vendor 更新。
- 要在本地包自己的
composer.json里加:"options": {"symlink": true} - Windows 用户必须用管理员权限运行
composer update acme/utils,否则 symlink 创建失败且无提示 - 验证是否成功:Linux/macOS 运行
ls -la vendor/acme/utils,看到->才算对;Windows 用dir vendor\acme\utils看是否为“JUNCTION” - 千万别删
vendor/后composer install——那会把包完整复制进去,失去热调试意义
最易忽略的是本地包 composer.json 里缺 "options": {"symlink": true},以及 Windows 下没提权运行 update。这两点一漏,就变成“以为在调试”,实际改的全是白改。


















