答案是未在composer.json的repositories中正确声明本地源。composer默认只识别packagist和已配置的远程仓库,对path类型本地包、私有git仓库等必须显式配置type为"path"或"git",且url需相对路径、目标含有效composer.json,否则install会因锁文件未更新而静默跳过。

不是包不存在,而是 Composer 没找到你本地定义的依赖源——常见于私有仓库、Git 仓库或 path 类型本地包。
为什么 composer install 找不到本地依赖库?
Composer 默认只认 Packagist 和配置过的远程仓库,对项目根目录下 vendor/ 外的本地路径、未注册的 Git 仓库或自建 Satis 服务,它一概无视。报错通常是:
Could not find package vendor/name in a version installable using your PHP version, PHP extensions and Composer version.Failed to download vendor/name: ... 404 Not Found- 或干脆静默跳过,
composer show vendor/name返回空
根本原因:没在 composer.json 的 repositories 里声明该本地源,或者声明方式不匹配实际结构。
path 类型本地包必须显式配置 repositories
如果你在 composer.json 中写了 "vendor/name": "dev-main",但这个包实际在 ../my-package 目录下,Composer 不会自动扫描父目录——必须手动加 repositories 块:
{
"repositories": [
{
"type": "path",
"url": "../my-package"
}
],
"require": {
"vendor/name": "*"
}
}
注意要点:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
url是相对于当前项目composer.json的路径,不能用绝对路径(如/home/user/my-package) -
type必须是"path",不是"package"或"vcs" - 目标目录下必须存在有效的
composer.json,且含正确name字段(格式为vendor/name) - 如果本地包用了
dev-main这类分支别名,确保其composer.json里有"minimum-stability": "dev"或你在主项目中加了--stability=dev
Git 仓库地址写错或认证失败导致 404
用 git@github.com:xxx/yyy.git 或 https://gitlab.example.com/group/project.git 当依赖时,常见问题:
- URL 少了
.git后缀(GitLab/自建 Git 需要;GitHub 可省略,但建议统一加上) - SSH 地址没配好密钥,
ssh -T git@github.com不通 → 改用 HTTPS +github-oauthtoken - HTTPS 地址被防火墙拦截,或没配
http-basic认证(私有 GitLab 必须) -
repositories类型写成"vcs",但实际应为"git"(Composer 2.2+ 推荐直接写"type": "git")
验证方式:在终端执行 git ls-remote https://your-repo-url.git,能列出 ref 才说明地址和权限都 OK。
composer.lock 锁定了旧版本,导致新本地包不生效
你刚把本地包路径改了、或新加了 repositories,但 composer install 仍报找不到——大概率是 composer.lock 还锁着旧解析结果。
- 删掉
composer.lock和vendor/,再跑composer install(适合开发环境) - 或强制重算依赖:
composer update vendor/name --with-dependencies,不碰其他包 - 检查
composer.lock里packages下是否有该包,以及source字段是否指向你期望的path或url
真正容易被忽略的是:即使 composer.json 改了 repositories,只要 composer.lock 没更新,install 就永远按锁文件走,不会重新探测本地源。










