不能软链接共享 vendor 目录,因其 autoload.php 硬编码项目绝对路径,导致跨项目类加载失败、psr-4 映射错乱;唯一安全方案是用 type: "path" 仓库将公共代码作为独立包引入,并在生产环境切换为 vcs 仓库。

不能用符号链接共享 vendor 目录,这是确定性错误源——类加载器硬编码路径、命名空间映射错乱、autoload.php 生成逻辑被破坏,不是配置能救回来的。
为什么 vendor 不能跨项目软链接?
Composer 的 autoload.php 在生成时把当前项目根路径写死进 PSR-4 映射和文件路径中。A 项目软链接 B 项目的 vendor/,B 的 autoload.php 里写的却是 /path/to/B/src/,而 A 的类实际在 /path/to/A/src/,运行时必然 Class not found。
常见翻车点:
- 用
ln -s ../shared/vendor ./vendor后,composer dump-autoload不报错但运行时找不到类 - CI 中用同一份
vendor缓存给多个应用复用 → 某个应用更新依赖后,其他应用 autoload 映射未刷新,随机报错 -
composer install --no-dev在 A 项目执行后,B 项目却仍加载了 dev 包(因为 autoload.php 里已缓存)
真正安全的复用方式:用 "type": "path" 管理公共代码包
本地开发阶段,让多个应用复用同一套 SDK 或基础组件,唯一合规路径是把公共代码做成独立包,并通过 path 类型仓库引入。这不是“省空间技巧”,而是 Composer 官方支持的隔离方案。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
实操要点:
- 公共代码目录(如
../acme-core)必须含合法composer.json,name字段为全限定格式(如"acme/core"),autoload的 PSR-4 命名空间与目录结构严格匹配 - 各应用的
composer.json中添加仓库配置:"repositories": [{"type": "path", "url": "../acme-core"}],并 require:"acme/core": "dev-main" -
url必须是相对于当前项目根目录的相对路径,不能跨出项目边界(../../shared会触发composer validate报错) - Windows 下需确认开发者模式启用,否则加
"options": {"symlink": false}避免静默失败
生产环境必须切换为 VCS 仓库
"type": "path" 只能在开发阶段用,上线前必须删掉或替换为 Git 地址。否则部署时因路径不存在直接报 Could not find package,且无法走镜像加速、权限控制或语义化版本约束。
切换步骤:
- 把
acme-core推到私有 Git 仓库(如https://git.example.com/acme/core.git) - 确保根目录有
composer.json,且打过带v1.2.0格式的 tag - 各应用中删掉
repositories里的path条目,改用:"repositories": [{"type": "vcs", "url": "https://git.example.com/acme/core.git"}] - require 改为稳定版本:
"acme/core": "^1.2"
真正要省空间,不是靠硬链接 vendor,而是靠精准拆分公共逻辑为独立包 + path 开发 + VCS 生产。否则节省的磁盘空间,远低于排查类加载错误的时间成本。










