repositories必须写在项目根composer.json顶层,嵌套或错放均无效;需配置"type":"path"和相对路径"url",本地包name须与require完全一致,且须清空composer.lock和vendor后执行composer install才能生效。

repositories必须在项目根composer.json顶层
Composer只认项目根目录下composer.json的顶层repositories字段,嵌在config、require或本地包自己的composer.json里都无效。常见错误是把仓库配置写进子目录包里,结果主项目完全看不到。
正确结构示例:
{
"require": {
"myvendor/mypkg": "dev-main"
},
"repositories": [
{
"type": "path",
"url": "../mypkg"
}
]
}
-
url必须是相对路径(如../mypkg),不能以/开头,Windows下会解析失败 -
url指向的必须是含合法composer.json的目录,不是.git或src/子目录 - 路径末尾不能带
/,"url": "../mypkg/"会被静默忽略
本地包composer.json的name和version必须匹配
主项目require中的包名,必须与本地包composer.json里的name字段逐字一致:大小写、分隔符(仅允许短横线-)、vendor名全部对齐。不一致就会报Could not find package xxx且composer show --all里根本不出现在列表中。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 检查本地包
composer.json是否存在、语法合法(无尾逗号、全双引号) -
name值如"acme/utils"≠"Acme/utils"≠"acme_utils" - 不要写
"version": "1.0.0";require时用"dev-main"而非"^1.0",否则跳过path源直连Packagist - 若本地包没初始化Git,需手动加
"version": "dev-main",否则Composer无法推断分支
已有composer.lock时必须清空重装
Composer默认只在首次安装或composer.lock缺失时读取repositories配置。一旦锁文件存在,它就照着旧记录还原,完全无视新配的path仓库。
- 删掉
composer.lock - 删掉
vendor/目录(残留旧包会导致autoload仍指向原位置) - 运行
composer install(不是update),它会重新解析composer.json并生成新锁文件 - 如果只想重装单个包,可先
composer remove myvendor/mypkg再composer require myvendor/mypkg:dev-main,但前提是repositories已生效
改了代码不生效?先确认是否真用了symlink
Composer对type: "path"默认尝试创建符号链接,但失败时会静默fallback到复制模式。你改本地代码,vendor/里还是旧副本——这是最隐蔽的失效原因。
- Linux/macOS执行
ls -la vendor/myvendor/mypkg,看到箭头→才是symlink;Windows用dir vendor\myvendor\mypkg,看到JUNCTION才对 - 若显示为普通文件夹,说明fallback了,立刻检查本地包自己的
composer.json是否漏了"options": {"symlink": true} - Windows需以管理员身份运行终端;Docker需
--cap-add=SYS_ADMIN且挂载方式支持symlink - autoload映射不会自动更新,改完本地代码后手动运行
composer dump-autoload -o
repositories声明、到本地包name和Git状态、再到锁文件清理和symlink权限,任一环断裂都会静默失败。最容易被忽略的是composer.lock残留和本地包composer.json里缺"options": {"symlink": true}这两处。

















