composer支持用path仓库加载本地包,但必须使用绝对路径(如c:/dev/my-pkg或/home/user/pkg),且本地包需含合法composer.json(含name和version),主项目composer.json须在repositories中显式声明type为path的仓库并require对应包名。

本地包用 path 仓库类型指向绝对路径
Composer 支持通过 path 类型仓库加载本地目录作为包,但必须用绝对路径(相对路径在某些场景下会失效,尤其是跨项目或 CI 环境)。关键不是“怎么写路径”,而是“怎么让 Composer 认出它是合法的本地包”。
-
path仓库的值必须是绝对路径,例如/Users/me/my-package或C:/dev/my-package - 该路径下必须包含有效的
composer.json(至少有name和version) - 主项目的
composer.json中需同时声明仓库 + require 条目,顺序不能颠倒 - Windows 下路径分隔符用正斜杠
/更稳妥(Composer 内部统一处理,反斜杠易被转义)
composer.json 里怎么写 path 仓库和依赖
不能只写 require,必须显式注册 path 仓库,否则 Composer 会报 Could not find package xxx。路径要加双引号防止 shell 解析问题,且推荐加 "options": {"symlink": false} 避免意外软链。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
{
"repositories": [
{
"type": "path",
"url": "/home/alice/my-utils",
"options": {
"symlink": false
}
}
],
"require": {
"my-org/my-utils": "*"
}
}
- 仓库
url是绝对路径,不是 URL;name字段在仓库定义里不生效,以目标目录中composer.json的name为准 -
require的版本约束写"*"即可,Composer 会自动匹配本地最新 commit 或修改状态 - 如果改了本地包的
composer.json(比如 version),需运行composer update my-org/my-utils刷新锁文件
为什么 composer install 有时不拉本地包?
常见原因是锁文件 composer.lock 里还存着旧的 dist / zip 地址,或者本地包路径变更后没清缓存。Composer 不会自动降级为本地源,除非明确命中 path 仓库规则。
- 先删掉
vendor/my-org/my-utils和composer.lock,再跑composer install - 检查
composer show my-org/my-utils输出的source是否为path类型,而不是dist - 若仍走 packagist,用
composer config --list | grep repositories确认没有全局仓库覆盖了本地配置 - 某些 IDE 或脚本会自动写入
~/.composer/config.json的仓库,优先级高于项目级,得手动清理
Windows 绝对路径容易踩的坑
Windows 用户最容易卡在路径格式上:用 C:\dev\my-pkg 会被当成转义序列(\d, \m),导致解析失败或静默跳过。
- 统一用正斜杠:
"url": "C:/dev/my-pkg" - 避免空格和中文路径,即使能解析也常在 symlink 或 git 操作中出错
- WSL 环境下注意:宿主机路径(如
/mnt/c/dev/my-pkg)和 WSL 原生路径(如/home/user/my-pkg)是两套体系,选哪个取决于你在哪执行composer install - Git Bash 中
$PWD返回的是 msys 格式路径(/c/dev/...),直接粘贴进composer.json是可用的
composer show 看实际加载源,再查 composer diagnose 确认仓库是否被识别。










