根本原因是 symlink 未生效,导致运行时加载的是 vendor 中的静态副本而非源码目录;验证需用 ls -la 或 dir 检查是否为链接,且本地包 composer.json 必须配置 "options": {"symlink": true}。

为什么改了本地包代码,类还是加载不到
根本原因不是 Composer 没扫描,而是 symlink 没生效,导致你改的是源码目录,运行时加载的却是 vendor/ 里一份静态副本。这种 fallback 行为完全静默,不报错也不提示。
验证是否真用了 symlink:ls -la vendor/vendor/name(Linux/macOS)或 dir vendorendor
ame(Windows)。看到 -> 或 JUNCTION 才是链接成功;如果显示普通文件夹,说明已 fallback 到 copy 模式。
- 关键点不在主项目
composer.json里配"symlink": true,而在于**本地包自己的composer.json中必须有"options": {"symlink": true} - Windows 用户必须以管理员身份运行终端,否则创建失败且无任何提示
- Docker 场景需加
--cap-add=SYS_ADMIN,且挂载方式要支持符号链接(如-v $(pwd)/../my-pkg:/workspace/my-pkg不行,得用绑定挂载并确保宿主机权限透传) - 路径末尾不能带
/,"url": "../my-pkg/"会被 Composer 完全忽略该仓库
composer dump-autoload 后类仍 not found 怎么定位
别猜路径,让 Composer 自己说。运行 composer dump-autoload -v,它会逐行输出扫描行为:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 若输出里压根没出现你的命名空间(比如
App),说明autoload配置根本没被识别——检查composer.json是否有语法错误(多逗号、BOM、单引号)、PSR-4 键值末尾是否漏了反斜杠("App"✅ vs"App"❌) - 若扫描到了命名空间但跳过了某些文件,注意看提示:可能是文件含 BOM、短标签未启用、或存在
.php.bak这类非法 PHP 文件卡住解析 - 最终映射是否写进
vendor/composer/autoload_psr4.php?打开它搜索你的前缀,确认映射路径是绝对路径(如$baseDir . '/src'),再手动检查该路径下是否存在对应文件
本地包的 autoload 配置为何在主项目里不生效
Composer 不会“继承”本地包的 autoload 规则。主项目只认自己 composer.json 里写的 autoload,本地包里的 autoload 只在它被当作独立项目运行时起作用。
也就是说:即使本地包 composer.json 写了 "psr-4": {"MyLib\": "src/"},主项目也不会自动加载 MyLibFoo —— 除非你在主项目的 autoload 里也声明同样的映射,或者把本地包 require 进来后,靠它的 autoload 被 Composer 主动合并(这仅发生在它被正确识别为依赖时)。
- 先确认本地包是否出现在
composer show --all输出中;如果没列出来,说明 path 仓库配置失败,回到第一个副标题排查 name 和路径 - 如果列出来了,再检查主项目
composer.json的autoload是否覆盖了该命名空间,或是否漏掉了MyLib前缀 - 不要依赖 IDE 自动补全判断加载状态,用
php -r "require 'vendor/autoload.php'; var_dump(class_exists('MyLibFoo'));"直接验证
CI/CD 或生产环境里 path 仓库突然失效
path 类型仓库是开发专用机制,上线前必须移除。CI/CD 环境中 ../my-pkg 路径几乎肯定不存在,且 symlink 在容器内基本不可用。
- 上线构建流程中,务必从
composer.json的repositories字段删掉所有"type": "path"条目,改用 VCS(如"type": "vcs", "url": "git@github.com:vendor/my-pkg.git")或私有 Packagist - 如果 CI 构建时执行了
composer install --no-dev,它会跳过repositories中的 path 条目(因被视为 dev-only),但不会报错,容易误判 - 生产环境部署后发现 autoload 失效,优先检查
vendor/composer/autoload_psr4.php里有没有你的命名空间——没有,说明 path 仓库压根没加载;有但路径指向错误,说明$baseDir计算异常(常见于用chdir()切换工作目录后 requireautoload.php)










