答案:因为Composer只从主项目composer.json的repositories数组中查找源,未显式注册path仓库则完全忽略本地目录。必须配置type为path的源、本地包name与require严格一致、设minimum-stability为dev,三者缺一不可。

本地开发中的扩展包,必须用 path 类型仓库显式注册,否则 composer require 永远不会找到它——不是版本写错,是根本没被扫描。
为什么 composer require vendor/pkg:dev-main 不装本地包
Composer 默认只查 Packagist 和 repositories 数组里声明的源。你把包放在 ./packages/my-pkg,但没在主项目 composer.json 的 repositories 里写进去,它就当那目录不存在。
- 常见错误:把
repositories写在本地包自己的composer.json里(完全无效) - Windows 下写绝对路径如
C:/work/my-pkg会静默失败;必须用相对路径,比如"../my-pkg"或"./packages/my-pkg" - 本地包目录下没有
composer.json,或有但name字段和require中写的不一致(大小写、连字符、斜杠全敏感) - 本地包没执行过
git init && git commit,Composer 会跳过该目录(即使有composer.json)
path 仓库配置的三个硬性条件
缺一不可,漏一条就会 Could not find package:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
url必须是相对路径,不能以/开头(Linux/macOS 也不建议绝对路径,跨环境易崩) - 本地包的
composer.json中name必须和require完全一致,version推荐设为"dev-main"(或用"branch-alias": {"dev-main": "1.0.x-dev"}) - 主项目
composer.json必须含"minimum-stability": "dev",否则dev-main被直接过滤;或者加"prefer-stable": true并配"stability-flags": {"vendor/pkg": "dev"}
改代码后如何立刻生效
默认行为不创建符号链接,改了本地包代码,主项目里还是旧的——除非你明确启用 symlink:
- 在
repositories条目中加"options": {"symlink": true}(Windows 必须显式写,且需开启开发者模式或管理员权限运行命令行) - 执行
composer update vendor/pkg,不是install,也不是dump-autoload;install只补缺失链接,不会刷新已有链接目标 - 验证:Linux/macOS 运行
ls -la vendor/vendor/pkg,应看到->指向源目录;Windows 运行dir vendorendorpkg,应显示“快捷方式”类型
自动加载映射不会自动更新
即使 path 配对成功、符号链接也建好了,use VendorPkgFoo 仍可能报 Class not found:
- 新增
path依赖后,必须手动运行composer dump-autoload,否则vendor/autoload.php里没有新包的 PSR-4 映射 - 如果本地包的
composer.json里写了"autoload": {"psr-4": {"Vendor\Pkg\": "src/"}},它的命名空间只会在下次dump-autoload后写入vendor/composer/autoload_psr4.php - 主项目若修改过自身
autoload(比如加了新psr-4),也要一起dump-autoload,否则新旧映射不同步
最常被忽略的是:路径、包名、稳定性三者必须同时对齐,且 symlink + dump-autoload 是两个独立动作,少一个都白配。

















