根本原因不是网络或缓存问题,而是Composer仅从主项目composer.json的repositories数组查找本地包,要求repositories写在根级、url为相对路径、本地包composer.json中name与require完全一致(大小写及分隔符敏感)。

为什么 composer require 找不到本地包
不是网络问题,也不是缓存没清,而是 Composer 根本没“看到”你的目录。它只从主项目 composer.json 根级的 repositories 数组里找源,require 字段只声明“我要谁”,不负责“去哪找”。常见失效原因:
-
repositories错写在本地包自己的composer.json里,而不是主项目的 -
url用了绝对路径(如C:/work/my-pkg或/home/user/pkg),Windows 下极易静默失败;必须用相对路径(如"./packages/my-utils") - 本地包目录下没有
composer.json,或有但name字段拼错、大小写不一致(比如写了"hoo/tool",却在require里写hoo/Tool) - 本地包没执行过
git init且至少一个commit,Composer 会直接跳过该目录
怎么配 repositories 才算生效
配置必须写在项目根目录 composer.json 的根级 repositories 数组中,type 必须是 "path",不能是 "package" 或 "vcs":
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
url是相对于主项目composer.json的路径,例如"./packages/my-utils";不能带file://,也不能用绝对路径 - 整个
repositories是数组,哪怕只加一个,也要写成[{ "type": "path", "url": "./packages/my-utils" }] - 若想让 Composer 完全忽略 Packagist,需在同级加
"packagist.org": false,否则它仍优先查官方源 - 本地包的
composer.json中必须有合法name和version(如"dev-main"),且项目级未设"minimum-stability": "dev"时,分支名必须显式写出
装上了但 Class not found 怎么办
90% 不是安装失败,而是自动加载链路断了:
- 确认本地包自己的
composer.json里有正确的autoload配置,例如:"psr-4": {"Hoo\Tool\": "src/"} - 改完本地包或新增命名空间后,必须运行
composer dump-autoload(开发阶段不用加-o) - 如果包提供 Laravel Service Provider 或 Yii2 Extension 类,必须手动在
config/app.php或common/config/bootstrap.php中注册 —— Composer 不处理这部分 - 别在
require 'vendor/autoload.php'之前就实例化类,也别用相对路径引入 autoload 文件
Windows 下 symlink 失效怎么办
默认不创建符号链接,且失败时无提示:
- 在
repositories条目中显式加"options": {"symlink": true} - Windows 需开启“开发者模式”或以管理员权限运行命令行,否则
symlink创建会静默失败 - 验证是否成功:运行
dir vendorhoo ool,应显示为“快捷方式”类型;Linux/macOS 用ls -la看是否带->指向源目录 - 若不想用 symlink(如 CI 环境),可设
"options": {"symlink": false}或"preferred-install": {"hoo/tool": "dist"}

















