Composer require报“Could not find package”根本不是网络或权限问题,而是因repositories未在主项目composer.json中正确定义、本地包name与require不完全匹配(大小写/分隔符敏感)、路径非相对或末尾含/、缺少合法composer.json,或未启用symlink导致。

能用,但“轻松”是假象——不踩坑的前提是搞清它根本不扫描、不猜测、不 fallback,只认三样东西:repositories 配置、本地 composer.json 的 name、路径的相对性。
为什么 composer require vendor/name 报 “Could not find package”
根本不是网络或权限问题,而是 Composer 根本没“看见”你的本地目录。它只在主项目 composer.json 的 repositories 数组里找源,require 字段只声明“我要谁”,不管“去哪拿”。
-
repositories必须写在主项目(你正在开发的那个项目的)composer.json里,不能写在本地包自己的composer.json中 -
url必须是相对路径(如"../my-package"),绝对路径在 Windows 上极易静默失败(盘符、反斜杠、空格都会中断) - 本地包目录下必须有合法的
composer.json,且其中name字段(如"acme/utils")要和require里写的完全一致(大小写敏感、分隔符只能用短横线-) - 版本约束必须用
dev-main、dev-develop这类分支名,不能写1.0.0—— path 源下 Composer 忽略version字段,只认当前 Git HEAD 所在分支
为什么改了本地代码,主项目里没生效
默认行为是复制(copy),不是链接(symlink)。你改了 ../my-package/src/Helper.php,vendor/acme/utils/Helper.php 还是旧文件。
- 必须显式启用符号链接:在本地包自己的
composer.json里加"options": {"symlink": true}(主项目配同字段也行,但本地包配更可靠) -
composer install不会刷新已有链接;必须运行composer update acme/utils才会重建 symlink - Windows 用户需以管理员身份运行终端,否则
symlink创建失败且无提示 - Docker 场景需加
--cap-add=SYS_ADMIN,并确认挂载方式支持 symlink
怎么验证 symlink 是否真成功
别信感觉,要看实际文件系统行为。
- Linux/macOS:运行
ls -la vendor/acme/utils,输出应含->箭头指向源目录 - Windows:运行
dir vendor\acme\utils,看到JUNCTION或“快捷方式”类型才是成功 - 如果显示为普通文件夹,说明 fallback 成 copy,立刻检查本地包
composer.json是否漏了options段 - autoload 不生效?那不是 Composer 没加载,而是类映射没更新 —— 改完本地包后,手动跑一次
composer dump-autoload -o
最常被忽略的点:Xdebug 断点失效,往往不是配置问题,而是 IDE 映射的路径和磁盘真实路径不一致 —— symlink 存在,但 IDE 跟丢了源码位置。


















