Composer找不到本地包是因为未在根composer.json的repositories中正确配置path类型源,且本地包需含匹配name的合法composer.json及autoload设置。

为什么composer require找不到本地包
不是网络或缓存问题,而是Composer根本没“看见”你的本地代码。它只从repositories声明的源里找包,不会自动扫描项目目录或子文件夹。你直接把包代码扔进packages/my-utils,不配repositories,它就当不存在。
-
repositories必须写在项目根目录composer.json的顶层数组里,不能嵌在require、scripts或任何其他字段中 -
type必须是"path",不是"vcs"或"package" -
url必须是相对于composer.json的路径,比如"./packages/my-utils";写成file://或绝对路径(/home/xxx)在CI或他人机器上大概率静默失效 - 本地包目录里必须有合法的
composer.json,且其中name字段(如"mycompany/utils")要和你在composer require时写的完全一致(大小写敏感)
composer.json里怎么写repositories
别套模板,直接抄这个结构——它能过composer validate,也兼容所有主流环境:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
{
"repositories": [
{
"type": "path",
"url": "./packages/my-utils"
}
],
"require": {
"mycompany/utils": "*"
}
}
- 如果本地包
composer.json里没写version,记得在项目根composer.json里加"minimum-stability": "dev",否则dev-main这类分支名会被稳定性策略过滤掉 - 多个本地包就往
repositories数组里追加对象,不要合并成一个 - 配完立刻运行
composer update mycompany/utils(不是install),强制刷新依赖图;require命令只在首次安装时走repositories,后续更新得用update
类加载失败?先检查本地包自己的autoload
就算composer require成功了,new MyCompanyUtilsClient()仍可能报Class not found——这和主项目无关,是本地包自己没配好自动加载。
- 打开
packages/my-utils/composer.json,确认里面有autoload段,例如:"psr-4": {"MyCompany\Utils\": "src/"} - 确保
src/目录存在,且MyCompanyUtilsClient类实际位于packages/my-utils/src/Client.php - 改完本地包的
composer.json或新增类后,必须在主项目根目录下运行composer dump-autoload,否则vendor/autoload.php里不会注册这个命名空间 - 别指望
files或classmap兜底:如果本地包用了PSR-4,就老实用PSR-4;混用只会让路径匹配逻辑变混乱
Windows 下最容易卡住的三个点
路径分隔符、符号链接、大小写处理和Linux/macOS行为不一致,导致本地开发能跑,CI一构建就崩。
-
url里别用反斜杠,统一用正斜杠/,哪怕在Windows上——Composer内部会做转换,硬写可能被当成JSON转义字符吃掉 - 避免用Windows资源管理器创建的“快捷方式”代替符号链接;Composer不识别快捷方式,
path仓库会直接跳过该目录 - 本地包的
name字段如果含大写字母(如"MyCompany/utils"),确保你在composer require时也严格保持大小写;Windows文件系统默认不区分大小写,但Composer解析name时是区分的
repositories + name,后者靠本地包自身的autoload配置 + 主项目的dump-autoload。两步缺一不可,且各自独立生效。

















