根本原因是本地包 composer.json 缺少 "options": {"symlink": true},导致 Composer 回退到 copy 模式,vendor 中为普通目录而非符号链接;同时 autoload 映射未更新,需手动执行 composer dump-autoload -o。

为什么改了本地包代码,vendor里还是旧的
根本原因是本地包自己的 composer.json 缺少 "options": {"symlink": true},导致 Composer 回退到 copy 模式——vendor/vendor/name 是个普通目录,不是符号链接。这和主项目配没配 "symlink": true 无关,关键在本地包自身声明。
Windows 上即使管理员权限运行终端,也会静默 fallback;Docker 容器挂载宿主机目录时,symlink 常因权限丢失而失效。
验证方式:
- Linux/macOS 执行
ls -la vendor/vendor/name,看到箭头(→)才是 symlink - Windows 用
dir vendor\vendor\name,看到JUNCTION或SYMLINKD才对
如果显示为普通目录,立刻检查本地包根目录下的 composer.json 是否漏了 options 段。
path 仓库 require 成功但类找不到
不是 Composer 没加载包,而是 autoload 映射没更新到真实路径。即使本地包写了 "psr-4": {"Acme": "src/"},主项目也不会自动继承这个映射。
必须手动执行:
composer dump-autoload -o
让 Composer 重新扫描并生成优化后的 autoload map。注意:composer install 或 update 不会触发 autoload 更新,除非你删了 vendor/autoload.php。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
常见错误现象包括:
Class not foundrequire_once(): Failed opening required 'vendor/autoload.php'- CI 构建失败,但本地能跑
Git subtree 同步后 vendor/autoload.php 冲突
把私有库以 git subtree add 拉进主项目子目录(如 lib/mylib)后,直接在主项目根目录运行 composer install,会把它装进主项目的 vendor/,导致命名空间冲突、Class not found、CI 构建失败。
这不是 bug,是 Composer 本身没有“作用域”概念。解决思路是隔离:
- 子项目需独立维护自己的
composer.json和vendor/ - 主项目不直接
require子项目路径,改用path仓库 + symlink 模式 - 确保子项目
composer.json中定义了正确的 autoload 映射,并且主项目执行过composer dump-autoload -o
IDE 和 opcache 缓存也常干扰 autoload 行为,开发时建议清理 IDE 的索引缓存,PHP CLI 运行前加 opcache_reset() 或禁用 opcache。
多项目共用 vendor 目录为什么总出问题
每个 PHP 项目必须有独立的 composer.json 和 vendor/ 目录,不可共享。强行共享会导致:
- autoload 冲突(多个 PSR-4 映射指向同一命名空间)
- 版本锁定错乱(
composer.lock记录的哈希与实际文件不一致) -
vendor/autoload.php路径失效(不同项目入口 require 的路径不同)
常见错误提示:
Class not found-
Package x has a dependency on y which does not match your minimum-stability(因不同项目 stability 设置不一致)
别把多个项目的 vendor/ 目录软链到同一位置,也别在父目录放通用 composer.json 然后用 --working-dir 切换——这会让 autoload 生成逻辑混乱,IDE 和 CLI 都可能误判上下文。

















