必须将path仓库配置在项目根目录composer.json的repositories数组中,type为"path"、url为相对路径(如"./packages/my-utils"),require字段仍须写标准vendor/name格式;本地包自身composer.json需有合法name(大小写严格一致)和version(如"dev-main"),否则匹配失败。

path仓库必须配在项目composer.json里,不能写require字段
很多人一上来就往require里填路径,比如"myorg/utils": "./packages/my-utils"——这完全无效。Composer的require只认vendor/name:version格式,路径值会被直接忽略,报错Could not find a matching version of package myorg/utils。
正确做法是把本地包路径声明为一个仓库,让Composer“知道它在哪”:
- 在项目根目录的
composer.json中添加repositories数组 -
type设为"path",url写相对路径(如"./packages/my-utils")或绝对路径(不推荐,换机器失效) -
require里仍写标准格式:"myorg/utils": "*"或"myorg/utils": "@dev"
本地包自身composer.json必须有合法name和version
Composer靠name字段匹配require中的包名,大小写必须完全一致。如果本地包composer.json里写的是"name": "MyOrg/utils",但你require的是myorg/utils,就会找不到。
version字段也不能空着或写非法值。开发阶段常用"dev-main"、"1.0.x-dev"或"dev-feature-branch"。注意:用@dev安装时,Composer默认只认dev-前缀的版本。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 确保本地包根目录下有真实存在的
composer.json,不是空文件或模板 - 如果改过
name,记得同步更新项目require里的写法 - 执行
composer validate ./packages/my-utils/composer.json可快速检查合法性
options配置决定是软链还是复制,Windows需特别处理
默认情况下,Linux/macOS上path仓库会创建符号链接,Windows则 fallback 为文件复制。但行为不总可靠,尤其在CI或Docker环境里。
- 加
"options": {"symlink": false}强制复制,避免Windows权限问题或软链失效 - 加
"options": {"symlink": true}显式启用软链(Linux/macOS下其实默认就是true) - Windows用户若想用软链,需以管理员身份运行终端,或开启“开发者模式”
- 复制模式下,改本地包代码不会自动反映到项目里,得重新
composer install
离线环境下必须关掉packagist.org,否则仍会连网
即使只配了path仓库,composer install仍可能触发DNS查询或访问repo.packagist.org,根本原因是Packagist作为默认源未被禁用。
- 运行
composer config --global repo.packagist false关全局默认源 - 检查项目级配置:
composer config repo.packagist输出应为空,不是composer https://packagist.org - 确认项目
composer.json的repositories里没有残留{"type":"composer","url":"https://packagist.org"}条目 - 用
composer install -v看日志,只要出现Downloading https://repo.packagist.org/packages.json,说明某处没关干净
真正离线的path流程,从头到尾不该发出任何HTTP请求——这点容易被忽略,但恰恰是调试失败最常见的根源。










