composer install不重建symlink,因它仅按composer.lock静态还原vendor,不重新解析本地路径;必须运行composer update vendor/name才能重新读取repositories、校验本地composer.json并重建符号链接。

改完本地包代码,主项目里还是旧逻辑?不是 autoload 没刷新,而是 symlink 根本没重建——composer install 不管这事,必须 composer update vendor/name。
为什么 composer install 不重建 symlink
它只按 composer.lock 里记录的 source 信息还原 vendor 目录,不会重新解析本地路径或校验目标目录是否变更。哪怕你刚把 src/Helper.php 改成 return true,只要 lock 文件没变,install 就照旧拉软链(或复制)旧快照。
-
composer.lock中"source": {"type": "path", "url": "../my-package"}是静态快照,不随本地文件实时更新 - CI/CD 环境下
install会直接 fallback 到远程源(因为本地路径不存在),所以 path 仓库只该用于本地开发 - 想跳过 lock 强制重连?不行。
install --ignore-platform-reqs或--no-scripts都不影响 symlink 行为
composer update vendor/name 才是唯一生效路径
这个命令会重新读取 repositories 配置、校验本地 composer.json、比对当前 Git 分支(如 dev-main)、然后重建 symlink —— 前提是你配了 "options": {"symlink": true}。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 必须指定包名:
composer update acme/utils,不能只写composer update,否则全量重算太慢且易误伤 - 如果本地包
composer.json里"name"是acme/utils,但require写成了acme/utils-dev,会报Could not find package—— name 必须完全一致,大小写敏感 - Windows 用户执行后用
dir vendor\acme\utils看是否显示“快捷方式”,没看到就说明 symlink 创建失败(常因未启用开发者模式或权限不足)
验证 symlink 是否真生效
别信 IDE 的自动跳转或 dump-autoload 输出,直接看文件系统链接关系:
- Linux/macOS:
ls -la vendor/acme/utils,输出末尾应有-> ../my-package - Windows:
dir vendor\acme\utils,应显示“”或“快捷方式”字样 - 修改本地
../my-package/src/Thing.php后,在主项目里new \Acme\Thing,立刻能拿到新行为 —— 这才是真正的“生效” - 如果类名报错或方法不存在,不是 symlink 问题,而是
autoload映射没覆盖到真实路径,需检查本地包composer.json里的"psr-4"是否指向"src/",再跑一次composer dump-autoload(仅作用于主项目)
最容易被忽略的一点:symlink 创建成功 ≠ 类能自动加载。Composer 只管链接文件夹,不保证命名空间映射正确;autoload 配置在本地包自身 composer.json 里,主项目不会继承,必须确保它的 psr-4 或 classmap 路径指向的是它自己的 src/,而不是相对主项目的路径。










