composer install 不加载本地 Git 路径包是因为它严格遵循 composer.lock,忽略 repositories 配置;需删锁文件后 run composer update 或用 composer require/vendor update 指定包,并确保 path 类型配置正确、本地包 name/branch/autoload 合规且含 Git 提交。

为什么 composer install 从不加载本地 Git 路径包
它只照着 composer.lock 里已记录的来源安装,完全跳过 repositories 配置。哪怕你刚在 composer.json 里加了 "type": "path",执行 composer install 也毫无反应——锁文件里还是 Packagist 的旧记录,本地配置再对也没用。
想让新路径生效,必须:
- 删掉
composer.lock后运行composer update - 或直接
composer require vendor/name(推荐,更安全) -
composer update vendor/name比全量更新更稳妥,避免其他依赖意外升级
type: "path" 的路径写法必须严格符合规则
路径必须是相对路径,且指向一个含合法 composer.json 的完整目录;绝对路径、file:// 前缀、波浪号 ~ 全部静默失效。
正确写法:
"url": "../my-package"-
"url": "./packages/utils"(注意开头的./或../) - 支持通配符:
"url": "../packages/*",Composer 会扫描所有匹配子目录下的composer.json
错误写法:
-
"url": "/home/user/pkg"(绝对路径) -
"url": "file:///tmp/pkg"(file://前缀) -
"url": "my-package"(缺上级路径,会被当成当前目录下的子目录名,而非相对路径)
本地包的 composer.json 必须满足三个硬性条件
否则会报 Could not find package 或 Class not found,和网络无关。
-
name字段(如"acme/utils")必须与主项目require中写的完全一致(大小写、斜杠都不能错) - 没打 Git tag 就别写
"1.2.0",改用"dev-main"或"dev-develop";分支名要和实际 Git 分支一致 -
autoload必须声明 PSR-4 映射,例如:"psr-4": {"Acme\Utils\": "src/"}
改完本地包的 composer.json 或代码后,需在主项目中运行 composer dump-autoload 才能刷新自动加载器。
符号链接不是 bug,是 path 类型的默认行为
用 type: "path" 加载成功后,vendor/vendor/name 是个符号链接,指向你本地源码目录——这是为了实时编辑调试。如果看到的是普通文件夹,反而说明配置没走 path 源,可能被 vcs 或 packagist 覆盖了。
另外,本地包目录必须有 Git 提交(至少一个 commit),否则 Composer 拒绝加载——它不看有没有 .git 目录,而是检查是否有可识别的提交历史。


















