Composer报“Could not find package”根本原因是name字段与require字符串未逐字匹配或url指向错误,需确保repositories配置正确、路径为相对路径、name大小写和符号完全一致,并验证目录可读可见。

Composer报“Could not find package”但路径明明存在
这不是 Composer 找不到文件,而是它压根没去读你写的那个目录——90% 的 case 都卡在 name 字段不匹配或 url 指向错误。Composer 不模糊匹配、不递归扫描、不猜路径,只做三件事:检查 repositories 里的 url 目录是否存在 → 读取该目录下的 composer.json → 校验里面 "name" 是否和 require 中的字符串**逐字一致**(大小写、短横线、vendor 名全部对齐)。
- 运行
cat ../my-pkg/composer.json | grep name(Linux/macOS)或findstr name ../my-pkg/composer.json(Windows),确认输出是"name": "vendor/name",不是"Vendor/Name"或"vendor_name" -
url必须指向含composer.json的目录,不能是父级:"../packages"错,"../packages/my-pkg"对 - 路径末尾不能带
/:"../my-pkg/"会被静默忽略 - 删掉
vendor/和composer.lock,再跑composer install --verbose,看日志里有没有Reading ../my-pkg/composer.json
执行 composer install 却完全无视 path 仓库
根本原因是 Composer 默认只查 packagist.org,你加的仓库只是摆设,除非显式禁用默认源。它不会因为你在 repositories 里写了就自动启用,必须告诉它“这条路优先走”。
- 确保
repositories写在项目根目录的composer.json根层级,不是塞进config或require里 - 第一项必须是
{"packagist.org": false},否则你的本地源永远排第二 -
url值禁用绝对路径(如/home/user/my-pkg)和file://前缀,Composer 会静默跳过,只认相对路径(如"../my-pkg") - 运行
composer show --all | grep vendor/name,如果无输出,说明仓库配置根本没生效
路径存在、name 对得上,却报 “Source path does not exist”
这个报错名不副实——它不是说路径写错了,而是文件系统拒绝配合:要么目录真不存在,要么存在但不可见、不可读、或被环境隔离了。尤其在 Windows、Docker、WSL 或 CI 中,表现更隐蔽。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 手动验证:
ls -la ../my-pkg/composer.json(Linux/macOS)或dir ..\my-pkg\composer.json(Windows),必须能列出文件;若失败,立刻检查大小写(Linux/macOS 区分)、挂载权限(Docker)、OneDrive 同步状态 - Windows 用户确认已启用开发者模式(设置 → 更新与安全 → 针对开发人员),否则
mklink被系统拒绝,symlink 创建失败后 Composer fallback 并误报此错 - Docker 中确保宿主机目录以可读写方式挂载(不含
ro),且容器内用户(如www-data)对该路径有读权限 - CI/CD 中直接放弃 path 仓库,改用
"type": "vcs"或私有 Packagist;上线前必须移除所有 path 配置,否则构建必然失败
改了本地代码,vendor 里还是旧副本
这是最隐蔽的问题:symlink 创建失败后 Composer 静默 fallback 到 copy 模式,你改代码毫无反应,还以为是缓存或 autoload 问题。
- 验证是否真用了 symlink:
ls -la vendor/vendor/name(Linux/macOS)看到->才对;Windows 运行dir vendor\vendor\name,看到JUNCTION才表示成功 - 控制 symlink 的开关不在主项目,而在**本地包自己的
composer.json** 里:"options": {"symlink": true} - 想强制复制?在本地包的
composer.json中写"options": {"symlink": false} - Windows 下必须以管理员身份运行终端;Docker 需加
--cap-add=SYS_ADMIN并确保挂载支持 symlink
真正卡住人的从来不是配置语法,而是路径的“可见性”——它得存在、可读、可遍历,还得在当前环境里真实可达。别信报错第一眼,先 ls 或 dir 确认目录本身。

















