答案是composer默认不信任本地路径,需在项目composer.json中显式配置"type": "path"的repositories,且本地包必须含合法composer.json、name字段与require完全一致、git已初始化并提交。

本地包 require 报 “Could not find package”
不是路径错了,是 Composer 默认不信任本地文件系统——它要求你显式声明 type 为 path,且本地包目录下必须有合法的 composer.json,其中 name 字段要和你在项目中 require 的完全一致(包括 vendor 名和斜杠)。
常见卡点:
- 本地包根目录没运行
git init && git add . && git commit -m "init",Composer 直接跳过 -
composer.json里缺"name": "vendor/name",或写成"name": "Vendor/Name"(大小写错) - 项目
composer.json的repositories写在了config下、或用了单引号、或 JSON 格式不合法(缺逗号、多逗号) -
require写了"vendor/name": "*"或"^1.0",但本地包只有dev-main分支,没打 tag
repositories 配置 type: "path" 的正确写法
必须是数组,每项带完整 type 和 url,url 是相对于项目根目录的路径,不能以 / 开头,也不能含 ../ 跨出项目根目录(否则 Composer 会静默忽略)。
示例(项目根目录下有 ../my-local-package):
{
"repositories": [
{
"type": "path",
"url": "../my-local-package"
}
]
}
注意:
-
url值必须可被 Composer 解析为真实目录,ls ../my-local-package/composer.json得返回存在 - 如果本地包在同级子目录(如
packages/mylib),url就写"packages/mylib",别加./ - 多个本地包需逐个列进数组,不能合并成一个
url
为什么改了 repositories 还是找不到?缓存和验证缺一不可
Composer 对 repositories 配置极其敏感:字段名错、JSON 格式破、路径不存在,都会导致它静默退回到默认源,不报错也不提示。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
验证是否生效的关键动作:
- 执行
composer diagnose,看输出中Repo packagist.org:行是否显示disabled(说明自定义源已接管) - 运行
composer show -a vendor/name,若返回空或Package not found,说明当前源里真没这个包 - 删掉
~/.composer/cache/repo/下所有目录(尤其带https---转义路径的),再试composer install
切记:改完 composer.json 后不删缓存,旧失败记录还在,重试照样走原逻辑。
本地包装上了但 autoload 失败
autoload 失效往往不是配置问题,而是路径硬编码被破坏。Composer 生成的 vendor/autoload.php 里有相对路径引用,一旦你手动移动 vendor 目录或改了 vendor-dir 却没同步入口文件,就会直接报 Class not found。
必须检查的地方:
- 项目入口文件(如
public/index.php)里require 'vendor/autoload.php'是否还指向旧路径 - 如果改过
config.vendor-dir,得手动把所有代码里硬写的vendor/autoload.php替换为新路径 - 某些框架 CLI 脚本(如
artisan、think)也内嵌了 vendor 路径,得一并更新
最稳妥的做法:不改 vendor-dir,用符号链接或部署脚本控制路径映射;真要改,就接受必须人工扫一遍所有 require 和 include 调用的事实。










