必须用repositories配置path仓库,不能在require里加"path"字段,因为require只解析包名和版本,忽略非法键;正确方式是在repositories中声明{"type":"path","url":"./local-package"},且url须为相对路径、本地包composer.json需含匹配的name和version。

必须用 repositories 配置 path 类型仓库,不能往 require 里硬塞路径 —— 否则 Composer 完全无视。
为什么 composer require vendor/name:dev-main 加 "path": "./xxx" 在 require 里无效
Composer 的 require 字段只认包名和版本约束,不解析路径字段。那个 "path" 键如果写在 require 对象里,会被当成非法 JSON 键直接忽略,连警告都不报。真正起作用的是 repositories 数组里的 {"type": "path", "url": "..."} 块。
-
url必须是相对路径,从当前项目composer.json所在目录开始算 —— 比如同级目录../my-package,不是./../my-package或~/my-package -
url不能是绝对路径(C:xxx或/home/user/xxx),Windows 下尤其容易因反斜杠或盘符导致静默失败 - 本地包的
composer.json中name字段必须和require里写的完全一致(包括大小写),缺了就报Could not find package vendor/name
如何让改完本地包代码立刻生效
默认行为是复制(copy),不是链接(symlink)—— 这意味着你改了 ../my-package/src/Helper.php,vendor/vendor/name 里还是旧文件。要热更新,得启用符号链接:
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 在本地包(即
../my-package/composer.json)中加:"options": {"symlink": true} - 或者全局开启:
composer config --global path.repo.symlink true - 执行
composer update vendor/name(不是dump-autoload)才会重建链接 - 验证是否成功:
ls -la vendor/vendor/name应该显示指向源目录的箭头;Windows 用户可用dir vendorendor ame看是否为“快捷方式”类型
path 仓库和 package 类型仓库的根本区别
有人试过用 {"type": "package", "package": {...}} 手动定义本地包信息,这虽然能装上,但会丢掉关键能力:
-
package类型不读取本地包的autoload、autoload-dev、scripts字段,所有自动加载规则得你在主项目里重复声明 - 改了本地包的命名空间或 PSR-4 映射,
package模式下不会自动重生成 autoloader,path模式下只要dump-autoload就行 -
package是静态快照,本地文件变更完全不感知;path是活引用,只要链接存在,require就是实时读取
Windows 下特别要注意的三件事
WAMP/XAMPP 环境下 path 仓库最容易卡在这几个点:
- 路径分隔符:配置
"url": "../my-package",别写成"../my-package\"或"..\my-package",Composer 只认正斜杠 - 权限问题:CMD 以普通用户运行,而 Apache 服务可能以 SYSTEM 身份写
vendor/,导致链接创建失败 —— 先删干净vendor和composer.lock,再用管理员 CMD 执行composer update - PHP CLI 版本错位:WAMP 托盘里选的是 PHP 8.2,但命令行
php -v显示 7.4?说明 PATH 还指着旧版 —— 清理系统环境变量里所有旧 PHP 路径,只留当前 WAMP 的php.exe目录
最常被跳过的动作是:改完本地包的 composer.json(比如加了 autoload),却忘了在主项目跑一次 composer dump-autoload —— 链接存在,但自动加载规则没刷新,类照样找不到。

















