必须显式在主项目根目录composer.json根级配置type为"path"的repositories,url用相对路径,本地包需含合法composer.json且name与require逐字一致,否则静默跳过并报“Could not find package”。

不能直接 composer require 本地目录,必须通过 repositories 显式声明 path 类型源,否则一律报 Could not find package —— 这不是网络问题,是配置根本没被读到。
主项目 composer.json 必须加 repositories 且写对位置
这个字段必须出现在项目根目录 composer.json 的最外层(和 require 同级),写在 extra、autoload 或子目录里全无效。
-
type只能是"path",写成"package"或漏掉会静默失效 -
url必须是相对路径,例如"./packages/my-utils"或"../my-pkg";file://、~/、绝对路径(如C:/work/my-pkg)在多数场景下不工作 - 别把这段配置错放到本地包自己的
composer.json里——它对主项目毫无作用
本地包目录必须满足三个硬性条件
缺一不可,否则 Composer 静默跳过,不报错也不提示。
- 目录下存在语法合法的
composer.json,且含name字段 -
name值必须和主项目require中写的**逐字一致**:大小写、斜杠、vendor 名全部敏感,"acme/utils"≠"Acme/utils"≠"acme-utils" - 该目录已运行
git init并至少有一个 commit;若尚未初始化 Git,需在本地包composer.json中显式加"version": "dev-main"
require 时版本号怎么写才有效
path 类型仓库不走语义化版本解析,所有 ^1.0、*、@dev 都可能绕过本地源直连 Packagist。
- 推荐写法:
"acme/utils": "dev-main"(前提是本地包有main分支或composer.json里写了"version": "dev-main") - 必须配合顶层设置
"minimum-stability": "dev",否则dev-main会被稳定性策略过滤掉 - 首次引入请用
composer update acme/utils,不是install——因为install只读composer.lock,不重新解析仓库类型
改了本地代码为什么 vendor 里没变
默认是复制(copy)模式,不是实时链接。要热更新,得主动启用符号链接。
- 在
repositories条目里加"options": {"symlink": true} - Windows 用户需以管理员身份运行终端,或开启“开发者模式”,否则
symlink会静默 fallback 到 copy - 改完本地包的
autoload映射(比如新增 PSR-4 路径)后,必须手动运行composer dump-autoload,否则新类不会被加载 - 验证是否生效:
readlink vendor/acme/utils(Linux/macOS)应输出源路径;Windows 下用dir vendor\acme\utils看是否为“快捷方式”
最容易被忽略的是 name 字段的大小写与斜杠一致性,以及 repositories 没放在根级 composer.json 的顶层——这两点导致的失败,日志里几乎不报错,只默默去 Packagist 找包。











