repositories必须写在主项目composer.json根级,类型为"path"且url为不含尾斜杠的相对路径;本地包需有合法composer.json、name与require完全一致、已git初始化;composer install不生效,须用composer update或require触发符号链接。

repositories 必须写在主项目 composer.json 根级
Composer 只读取主项目根目录下 composer.json 文件顶层的 repositories 数组,其他位置全无效。把配置塞进 require、config 或本地包自己的 composer.json 里,等于没写。
正确写法是:
{
"repositories": [
{
"type": "path",
"url": "../my-package"
}
],
"require": {
"acme/utils": "dev-main"
}
}
常见错误:
-
repositories写成对象而非数组(如"repositories": { ... }) -
url写成"../my-package/"(末尾斜杠会导致静默跳过) - 路径含空格、中文或 Windows 盘符大小写不一致,某些 PHP 版本会直接失败
本地包目录必须满足三个硬性条件
Composer 加载 path 类型仓库时,会逐项校验本地目录是否“合格”,缺一不可:
- 目录下存在合法
composer.json(UTF-8 无 BOM,语法正确,无尾逗号) -
composer.json中name字段必须与require中完全一致(大小写、斜杠、短横线都敏感,"acme/utils"≠"Acme/Utils") - 该目录已执行
git init并至少有一个 commit(git add . && git commit -m "init"),否则 Composer 直接跳过
注意:version 字段在 path 源中仅作占位,实际解析依赖当前 Git HEAD 所在分支名,所以建议写 "dev-main" 或 "dev-develop",别写 "1.0.0"。
为什么 composer install 不加载本地包
composer install 完全忽略 repositories 配置,它只按 composer.lock 里记录的来源和版本安装——哪怕你刚加完 path 配置,install 也什么都不会做。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
要让本地包生效,必须:
- 删掉
composer.lock后运行composer update(全量更新) - 或更安全地:运行
composer require acme/utils:dev-main(自动触发 update 单个包) - 或运行
composer update acme/utils(仅刷新该包,不碰其他依赖)
执行后检查 vendor/acme/utils 是否为符号链接(Linux/macOS 下 ls -la 显示 ->;Windows 下 dir 显示“快捷方式”)。不是链接,说明根本没走 path 源。
启用符号链接与实时生效的关键操作
默认行为是创建符号链接,但需显式启用且系统支持:
- 在
repositories条目中加"options": {"symlink": true} - Windows 用户必须开启“开发者模式”或以管理员权限运行命令行,否则
symlink创建失败且无提示 - 改完本地包代码后,**必须**运行
composer update acme/utils——dump-autoload不重建链接,install完全不处理已有包
如果想强制复制(如 CI 环境),可设 "preferred-install": {"acme/utils": "dist"} 或 "options": {"symlink": false}。
最易被忽略的是:路径、name、版本三者必须同时对齐,错一个就静默失败,不会报错提示具体哪错了。










