改完本地包代码vendor没变,大概率是symlink未成功而静默fallback至copy模式;须在本地包composer.json中配置"options": {"symlink": true"},并用ls -la或dir验证是否含->或junction。

改完本地包代码,为什么 vendor 里没变?
大概率不是 Composer 没反应,而是 symlink 根本没建成功,Composer 静默 fallback 到了 copy 模式。你看到的 vendor/vendor/name 是个普通文件夹,不是链接 —— 这时改任何本地源码都无效。
验证方式:ls -la vendor/vendor/name(macOS/Linux)或 dir vendor\vendor\name(Windows),必须看到 -> 或 <symlinkd></symlinkd> 才算真链接。
-
symlink启用依赖本地包自己的composer.json,不是主项目的 —— 必须在本地包根目录的composer.json里写"options": {"symlink": true} - Windows 用户必须以管理员身份运行终端,否则创建失败且无提示
- 本地包目录下没执行过
git init && git add . && git commit -m "init",Composer 会直接拒绝 symlink - 主项目
composer.json中若存在"config": {"symlinks": false},会强制关闭所有链接
本地包改了代码,还要不要 run composer update?
如果 symlink 已生效,**完全不用**。改完本地包里的 src/Helper.php,主项目里 new Helper() 立刻加载新逻辑,零延迟。
但注意:只有类文件变更能即时生效;如果改了 composer.json 里的 autoload 映射(比如新增命名空间),必须手动运行 composer dump-autoload -o,否则 use 语句会报错找不到类。
- 改类方法、属性、注释 → 直接生效
- 新增类文件但没更新 autoload →
composer dump-autoload -o后才能use - 改了
require或scripts字段 → 必须composer update vendor/name重解析依赖 - 切 Git 分支(如
git checkout feat/x)→ 只要版本约束是"dev-main"或"@dev",也无需 update
为什么 require 写 "*" 就不走本地包?
"vendor/name": "*" 会让 Composer 优先查 Packagist,而不是你的 path 仓库。它只在远程找不到时才 fallback,结果就是本地改了也白搭。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
正确写法只有两种:
-
"vendor/name": "dev-main"—— 要求本地包有composer.json中"version": "dev-main",且 Git 分支名为main -
"vendor/name": "@dev"—— 强制走 path 源,忽略 Packagist 和本地包的version字段,最省心
别信文档里“通配符灵活”的说法,* 在 path 场景下就是陷阱。
IDE 断点不命中,路径对不上怎么办?
Xdebug 或 PHPStorm 断点打在 vendor/vendor/name/src/Helper.php,但实际执行的是 ../my-package/src/Helper.php —— 如果 IDE 的路径映射没同步,断点就永远不触发。
关键检查点:
- 确认 IDE 中设置的「项目根目录」和「本地包真实磁盘路径」一致(比如
/Users/me/projectvs/Users/me/my-package) - PHPStorm:File → Settings → PHP → Servers,把本地包路径加进 Path Mapping,指向
../my-package - VS Code:检查
launch.json中pathMappings是否将vendor/vendor/name映射到真实路径 - 别依赖 “自动路径发现”,手动配死最稳
路径映射错一个层级,断点就失效,而且没有任何错误提示 —— 这是最容易被忽略的调试盲区。










