必须在项目composer.json的repositories字段中配置type为"path"的本地包路径,且require时使用dev-main等分支别名,同时本地包需有正确name、git初始化及合法composer.json。

直接用 composer require 是装不上本地包的——它默认只查 Packagist,根本不会看你硬盘上哪有代码。必须靠 repositories + path 类型显式声明,否则永远报 Could not find package。
必须在项目 composer.json 里配 repositories.path
这是第一步,也是唯一入口。Composer 只读项目根目录下 composer.json 最外层的 repositories 字段,其他位置全无效。
-
url必须是相对于该composer.json的路径,比如"./packages/my-utils"或"../my-pkg";绝对路径、file://、~/全部被拒绝 -
type必须写成"path",写成"package"或漏掉就彻底失效 - 别把这段配置错放在本地包自己的
composer.json里——它对主项目完全没作用
本地包目录下要有合法的 composer.json
就算 repositories 配对了,缺以下任一条件,Composer 就静默跳过,不报错也不提示。
- 目录里必须有语法正确的
composer.json,且含name字段(如"acme/utils") -
name值必须和你在require中写的**逐字一致**:大小写、斜杠、连字符都不能差("Acme/utils"≠"acme/utils") - 目录需已运行
git init并至少有一个 commit;否则 Composer 无法识别dev-main这类分支名(临时解法:在本地包composer.json里加"version": "dev-main")
require 时必须用 dev- 分支别名,不能写 * 或 ^1.0
path 类型仓库不走语义化版本解析,只认明确的开发分支标识。写模糊约束会直接让 Composer 回退到 Packagist 查找。
- 正确写法:
"acme/utils": "dev-main"或"acme/utils": "@dev" - 错误写法:
"acme/utils": "*"、"acme/utils": "^1.0"、"acme/utils": "1.0.x-dev" - 如果项目顶层没设
"minimum-stability": "dev",还得加上,否则dev-main会被过滤掉
装完后改代码不生效?检查 symlink 和 autoload
默认是复制模式,改本地包代码不会自动同步到 vendor/。要热更新,得启用符号链接并刷新自动加载器。
- 在
repositories条目里加"options": {"symlink": true}(Windows 用户需管理员权限或开启“开发者模式”) - 改完本地包的
autoload或autoload-dev后,必须手动运行composer dump-autoload --dev,否则新映射不生效 - 验证是否真链接成功:
readlink vendor/acme/utils(Linux/macOS)应输出源路径;Windows 下用dir vendor\acme\utils看是否为快捷方式
最常被忽略的是 name 字段大小写和 git 初始化——这两个点一错,整个流程就静默失败,连错误提示都不给。别急着跑测试,先确认 readlink 输出和 class_exists() 返回 true,再往下走。


















