composer require 找不到本地包主因是三处未对齐:repositories 的 url 须以 ./ 或 ../ 开头并指向含 composer.json 的目录(末尾无 /);本地包 name 字段须与 require 字符串逐字一致(大小写、短横线、斜杠全敏感);require 必须显式指定 dev-main 等开发版本别名,不可省略或用 *。

Composer 没有“虚拟包”概念,所谓“虚拟包调试”实际是误用术语——你真正要做的,是用 path 类型仓库把本地目录当作一个真实包来加载和调试。
为什么 composer require 找不到你的本地包
不是缓存问题,也不是网络故障,而是三处硬性对齐没做到位:
-
repositories中的url必须以./或../开头,且指向含composer.json的目录(不是文件),末尾不能加/ - 本地包根目录下的
composer.json里name字段,必须和你在主项目中require的字符串逐字一致:大小写、短横线-、斜杠/全部匹配,例如"acme/utils"≠"acme_utils"≠"Acme/Utils" -
require时必须用开发版本别名,如"acme/utils": "dev-main"或"acme/utils": "@dev";写"*"或"1.0.0"会因稳定性策略被跳过
改了代码为什么 vendor 里没更新
因为 symlink 没生效,Composer 静默 fallback 到了 copy 模式——这是最隐蔽的调试断点。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 关键不在主项目的配置,而在本地包自己的
composer.json是否包含:"options": {"symlink": true} - Windows 下必须以管理员身份运行终端,否则
mklink失败且无提示 - Docker 容器需启动时加
--cap-add=SYS_ADMIN,且宿主机挂载方式要支持符号链接 - 验证是否真用了 symlink:
ls -la vendor/acme/utils(Linux/macOS)或dir vendorcmeutils(Windows),看到箭头或JUNCTION才算成功;若显示为普通文件夹,说明已 fallback
类能 new 但测试跑不起来?检查 autoload-dev
autoload 生效分两层:生产 autoload(autoload)管 src/,测试 autoload(autoload-dev)管 tests/。漏配后者,phpunit 就永远找不到测试类。
-
autoload-dev的 PSR-4 映射末尾必须带反斜杠,例如:"Acme\Tests\": "tests/",少一个或/就断掉 - 如果
tests/bootstrap.php没命名空间,不能塞进 PSR-4,得单独用autoload-dev.files引入 - 改完
autoload-dev后,必须手动执行:composer dump-autoload --dev,否则vendor/composer/autoload_dev.php不更新 - 验证是否生效:
php -r "echo class_exists('Acme\Tests\ExampleTest') ? 'ok' : 'fail';"
最容易被忽略的是:路径对齐只发生在 composer update 阶段,而 autoload 映射更新是另一件事;两者都得做,且顺序不能反——先确保 vendor/acme/utils 是 symlink,再确认 dump-autoload 已刷新映射。










