本地path仓库必须配置在主项目composer.json的repositories数组中,使用相对路径如"./packages/hoo-log",且本地包需含正确name、git初始化、psr-4自动加载结构,并执行composer update hoo/log生效。

本地path仓库必须写在主项目composer.json里
Composer根本不会主动扫描你硬盘上的任意目录,它只认主项目根目录下composer.json里的repositories数组。把repositories塞进本地包自己的composer.json、或者丢到config字段里,全都没用。
正确写法是:在主项目的composer.json中添加如下结构(注意是数组):
{
"repositories": [
{
"type": "path",
"url": "./packages/hoo-log"
}
]
}
常见错误现象:composer require hoo/log报Could not find package,但composer config --list | grep repositories压根不显示你配的源——说明配置没被加载。
-
url必须用相对路径(如"./packages/hoo-log"),禁用file://、~/、$HOME等写法 - Windows下路径分隔符统一用
/更稳妥,避免转义问题 - 该条目必须是
repositories数组的成员,哪怕只有一个源也要写成[{...}],不能写成对象
本地包composer.json的name和version必须严格对齐
Composer扫描path源时,只读取目标目录下的composer.json,只要缺name、格式错(比如写成hoolog而不是hoo/log)、大小写不一致(Hoo/Log vs hoo/log),就直接跳过,不报错也不提示。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
本地包composer.json至少要包含:
{
"name": "hoo/log",
"description": "Lightweight log utility for PHP projects",
"type": "library",
"autoload": {
"psr-4": {
"Hoo\Log\": "src/"
}
},
"require": {
"php": ">=8.0"
}
}
-
name必须是vendor/name格式,斜杠不可省略,全部小写 -
version字段非必需,但require时必须用dev-main这类分支名,不能用^1.0或* - 目录必须已执行
git init && git commit -m "init",否则Composer拒绝识别
require后必须执行composer update,且要指定包名
执行composer require hoo/log:dev-main只是往require里加一行声明;真正让Composer去拉取并建立链接的是update命令。用install只会重建缺失的符号链接,不会刷新已有链接的目标路径。
- 优先运行
composer update hoo/log,避免全量update导致其他依赖意外升级 - Linux/macOS验证是否成功:
ls -la vendor/hoo/log应看到->指向./packages/hoo-log - Windows验证:
dir vendorhoolog应显示为“快捷方式”类型(前提是启用了"options": {"symlink": true}) - 若想强制复制而非符号链接(如CI环境),在
repositories条目中加"options": {"symlink": false}
日志包代码结构要支持PSR-4自动加载
你的src/目录结构必须与autoload.psr-4中声明的命名空间完全匹配,否则composer dump-autoload也救不了。
例如,若composer.json里写了"Hoo\Log\": "src/",那src/Logger.php就必须以namespace HooLog;开头,类名为Logger。
- 不要把类文件放在
src/Log/Logger.php却声明"Hoo\Log\": "src/"——这会导致HooLogLogger实际对应src/Log/Logger.php,但自动加载器会去找src/Logger.php - 建议在
src/下建Contracts/和Drivers/子目录,把接口和具体实现分离,方便后续扩展 - 测试时直接在主项目里
new HooLogLogger(),能实例化且不报Class not found才算真正跑通










