Composer本地包require失败90%因name或路径不匹配:name须逐字一致(大小写、斜杠、vendor名全对齐),url须指向含composer.json的目录且为相对路径(如"../my-pkg"),末尾不可加/。

path仓库配置后require失败,90%是name或路径不匹配
Composer不会模糊匹配包名或路径,name字段必须和require中写的**逐字相同**:大小写、分隔符(只能用短横线-,不能用下划线_或大写字母)、vendor名全部对齐。路径也一样——url指向的是**含composer.json的目录**,不是文件,且必须是相对于主项目composer.json的位置(如"../my-pkg"),不能是 shell 当前工作目录下的相对路径。
常见错误现象:Could not find package vendor/name,但composer show --all里根本没出现该包名。
- 检查本地包根目录下是否存在合法
composer.json(无尾逗号、全双引号、JSON语法有效) - 确认
name字段值与require中字符串完全一致,例如"acme/utils"≠"Acme/utils" -
url末尾不要加/,"url": "../my-pkg/"会导致静默忽略整个仓库 - Windows 用户避免路径含中文或空格,某些 PHP 版本解析会失败
为什么改了代码没生效?symlink没启用或fallback了
path 类型仓库默认尝试创建符号链接(Linux/macOS)或目录映射(Windows),但失败时会静默回退到复制(copy),结果你改本地源码,vendor/里还是旧副本——这是最隐蔽的调试陷阱。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
关键不在主项目配"symlink": true,而在于**本地包自己的composer.json里是否声明了"options": {"symlink": true}**。缺这句,Windows 上即使管理员权限运行终端,也会 fallback;Docker 容器挂载宿主机目录时也常因权限丢失 symlink 能力。
- 验证是否真用了 symlink:
ls -la vendor/vendor/name(Linux/macOS)或dir vendorendor ame(Windows),看到->或JUNCTION才是成功 - 若显示为普通文件夹,说明 fallback 成 copy,立刻检查本地包
composer.json是否漏了options段 - Windows 下必须以管理员身份运行终端,否则 symlink 创建失败且无提示
- Docker 场景需在
docker run时加--cap-add=SYS_ADMIN并确保挂载方式支持 symlink
autoload不生效,不是Composer没加载,而是映射没更新
path 仓库让包“存在”,但类能否被new或use,取决于 autoload 映射是否包含它的真实路径。即使本地包composer.json写了"psr-4": {"Acme\": "src/"},主项目也不会自动继承——必须确保主项目执行过composer dump-autoload -o,且本地包的 autoload 配置本身合法。
-
autoload-dev的 PSR-4 映射末尾必须带反斜杠:"MyPackageTests\": "tests/",少一个就断掉 - tests/Http/ClientTest.php里声明
namespace MyPackageTestsHttp,那autoload-dev就不能写成"MyPackageTests": "tests/"(缺Http层级) - 无命名空间的辅助文件(如
tests/bootstrap.php)不能塞进 PSR-4,得用autoload-dev.files单独引入 - 改完
autoload-dev后,必须手动运行composer dump-autoload --dev,否则vendor/composer/autoload_dev.php不更新
生产环境部署前必须移除path仓库配置
path 仓库只适用于开发阶段。生产服务器上不存在../my-pkg这种路径,Composer 在找不到时会直接报错,不会自动回退到 Packagist 或其他远程源——部署流程会中断。
- 上线前务必从主项目
composer.json的repositories中删除 path 条目,或改用条件化配置(如通过环境变量控制,但需配合自定义脚本) - 确保
composer.lock已提交,且其中记录的是远程源的 dist URL 和哈希,而非本地路径 - CI/CD 流水线中应使用
composer install --no-dev,禁用所有开发期仓库配置 - 若团队多人协作,建议把 path 配置写在
composer.json的extra字段或独立配置文件中,通过脚本动态注入,避免误提交
name差一个字母、url多一个/、本地包缺git init、或者忘了在本地包自己的composer.json里开symlink——这些地方 Composer 全部静默失败,不报错也不提示。

















