composer path仓库必须配置在项目根composer.json最外层repositories数组中,且本地包需含匹配name/version的composer.json、已git初始化并启用symlink,更新代码须用composer update而非install。

Composer path仓库必须写在项目根composer.json的repositories数组里
配置不生效,八成是位置错了。它必须出现在项目根目录下的composer.json最外层repositories字段中,不能塞进require、config或extra里。哪怕只配一个本地包,也要写成数组形式:
{
"repositories": [
{
"type": "path",
"url": "./packages/my-utils"
}
],
"require": {
"acme/my-utils": "dev-main"
}
}
写成"repositories": { ... }(对象而非数组)、或漏掉方括号、或把整个块缩进到其他字段下,Composer 都会静默忽略。
本地包目录必须含合法composer.json且name/version对齐
Composer 不看目录名,只读composer.json里的name和version。三处必须完全一致:
- 本地包
./packages/my-utils/composer.json中"name": "acme/my-utils" - 项目
composer.json中repositories.url指向"./packages/my-utils"(注意:是目录,不是composer.json文件) - 项目
require中写"acme/my-utils": "dev-main"(name大小写、斜杠、vendor前缀全匹配)
version字段不能空,建议填"dev-main"(若默认分支是main)或"dev-develop";若留空或写"1.0.0"但本地没打 tag,composer require会报Could not find a matching version。
符号链接不是自动开启的,得靠Git状态和options控制
Linux/macOS 默认创建软链,但前提是:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 本地包目录已执行
git init并至少有一个commit(否则 Composer 拒绝加载) - 本地包
composer.json里显式声明"options": {"symlink": true},或全局启用:composer config --global path.repo.symlink true - Windows 用户需启用“开发者模式”+管理员权限运行命令行,否则 fallback 为复制行为
验证是否真链接成功:ls -la vendor/acme/my-utils(Linux/macOS)输出含->;dir vendor\acme\my-utils(Windows)看到<symlinkd></symlinkd>才对。如果只是普通文件夹,说明没走 path 仓库,可能被 Packagist 覆盖了。
改了本地代码后必须运行composer update vendor/name
composer install不重建已有链接,它只按composer.lock还原——哪怕你刚改完./packages/my-utils里的 PHP 文件,install也无动于衷。
要刷新链接,必须运行:
-
composer update acme/my-utils(推荐:精准、快、不扰动其他依赖) - 或删掉
composer.lock再跑composer update(仅首次引入时必要)
别用composer dump-autoload——它只更新类映射,跟 symlink 无关;也别指望composer install --force之类不存在的参数。
最易被忽略的一点:CI/CD 环境中符号链接必然失败(路径不可达),上线前务必从repositories里删掉 path 条目,否则构建直接中断。










