必须写在依赖方的composer.json里,如app/web/composer.json的repositories字段中配置path源,路径为相对路径(如"../packages/utils"),require版本须为"dev-main",且需执行composer clear-cache确保生效。

path仓库配置写在哪个composer.json里
必须写在依赖方的 composer.json 里,不是被依赖的包里。比如你有个 packages/utils 包,想让 app/web 项目直接加载它,就得在 app/web/composer.json 的 repositories 字段里声明 path 类型源。
常见错误是把 repositories 放到 packages/utils/composer.json 中——这毫无作用,Composer 只读取当前安装命令所处项目的根 composer.json。
-
repositories是“我(当前项目)从哪儿找包”,不是“我(这个包)希望被谁怎么找” - 路径必须是相对于当前项目根目录的相对路径,比如
"../packages/utils",不能用绝对路径或~/ - 如果路径含空格或特殊字符,Windows 下容易出错,建议统一用正斜杠
/,Composer 能正确解析
require版本号必须写成"dev-main"或"dev-master"
用 path 方式加载本地包时,Composer 不会读取目标包 composer.json 里的 version 字段,而是强制以分支名为版本依据。如果你的 packages/utils 当前在 main 分支,require 就得写 "myorg/utils": "dev-main",写 "1.0.0" 或 "*" 会失败并报错:Could not find package myorg/utils at version *.
- 分支名要和实际一致:Git 默认是
main,不是master;改过默认分支的,必须同步更新require版本字段 - 不要加
-dev后缀(如dev-main-dev),那是旧版 Composer 的遗留写法,新版会忽略或报错 - 如果目标包没提交任何 commit(空仓库),Composer 会提示
No valid composer.json was found,哪怕路径是对的
为什么composer install后vendor里还是远程包而不是本地链接
最常见原因是 repositories 配置未生效:要么拼写错误(比如写成 repository 少了个 s),要么 type 写成了 vcs 或 package,而正确值必须是 path。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
另一个隐蔽问题是缓存:Composer 会缓存远程包元数据,即使你删了 vendor 和 composer.lock,旧缓存仍可能导致它跳过 path 源。执行 composer clear-cache 再重试。
- 确认是否生效:运行
composer show myorg/utils,输出中source行应显示type : path和具体路径,而不是type : git - 如果用了
composer update但没指定包名,它可能沿用 lock 文件里的远程记录;强制刷新需加--with-dependencies或先删composer.lock - Windows 下路径大小写不敏感,但 Composer 的
path匹配是大小写敏感的,../Packages/Utils和实际目录../packages/utils不匹配就会回退到 Packagist
path依赖能否自动跟踪git commit变化
不能。path 类型本质是符号链接(Linux/macOS)或复制(Windows),它只在 composer install 或 update 时建立一次映射,后续你在 packages/utils 里改代码、提交 commit,不会自动同步到 vendor/myorg/utils。你需要手动重新运行 composer update myorg/utils 才能拉取最新内容。
这意味着它适合开发调试,不适合 CI 构建或需要强一致性的场景。CI 环境应禁用 path,改用正式发布的版本号 + 私有仓库(如 Satis 或 Private Packagist)。
- 想“热更新”,可以写个简单脚本监听
packages/**目录变更,触发composer update vendor-name/package-name - 注意:
path包里的autoload配置(如psr-4)仍然生效,但scripts不会自动运行——post-install-cmd这类钩子只对真正安装的包触发 - 多个
path依赖之间有循环 require?Composer 会直接报错退出,且不提示具体哪两个包互引,得靠人工排查composer.json里的require字段
path。别指望一次配对,多看 composer show 输出和 vendor/composer/installed.json 里的 source 字段。

















