必须在主项目composer.json的repositories中配置path仓库,如{"type":"path","url":"./packages/my-utils"},再执行composer require vendor/name:@dev;本地包需有合法composer.json且name与require完全一致,url用相对路径,版本用@dev或dev-main。

本地开发时必须用 repositories 声明 path 类型源
不配 repositories,composer require 就算指向本地目录也必然失败。Composer 不会主动扫描文件系统找包,它只从已声明的源里拉取。
在项目根目录 composer.json 的根级写:
{
"repositories": [
{
"type": "path",
"url": "./packages/my-utils"
}
]
}
url 必须是相对路径(以 composer.json 为基准),不能带 file://,也不能用绝对路径;Windows 下尤其注意斜杠方向,统一用 / 更稳妥。
- 本地包目录(如
./packages/my-utils)下必须有合法composer.json,且含name字段(如"mycompany/utils") - 执行
composer require mycompany/utils:@dev—— 必须加@dev,否则稳定性策略可能过滤掉dev-main分支 - 成功后,
vendor/mycompany/utils是个符号链接,指向你本地目录,改代码立刻生效
composer.json 里 name、autoload、type 三者缺一不可
name 决定安装时的包名,大小写敏感,格式必须是 vendor/name(如 hoo/tool),不能只写 tool。
autoload 控制类怎么加载,Laravel 或通用库推荐用 psr-4:
"autoload": {
"psr-4": {
"Hoo\Tool\": "src/"
}
}
type 虽非强制,但建议明确:普通库填 "library",Laravel 包填 "laravel-package",插件必须填 "composer-plugin"。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 没写
autoload→ 运行时报Class not found,和框架无关,是 Composer 根本没注册命名空间 - 写了
psr-4但路径末尾少了/(如"Hoo\Tool\": "src")→ 自动加载失效 - Laravel 包若想自动注册 Service Provider,还需在
extra.laravel.providers里声明类全名
装上了却 Class not found?先跑 composer dump-autoload
只要改过 composer.json 里的 autoload,或新增了类文件,就必须手动刷新自动加载映射。Laravel 或其他框架不会帮你触发这步。
开发阶段执行:
composer dump-autoload
别加 -o(优化模式),它会跳过动态路径(比如 path 源的 symlink),导致本地修改不生效。
- 确认
vendor/autoload.php是最后引入的——任何在它之前就new类或use命名空间的操作都会失败 - 检查
src/下 PHP 文件的命名空间是否与目录结构严格匹配(如src/Constants/ErrorCode.php必须声明namespace HooToolConstants;) - Windows 下如果
dump-autoload报错或不生效,尝试关闭 Windows Defender 实时防护(它有时会锁住 symlink)
发布到 Packagist 前,确保 composer.json 语法合法且含必要字段
Packagist 不校验代码,但会读取并索引 composer.json。字段缺失或格式错误会导致包无法被发现或安装失败。
最小可用配置至少包含:
{
"name": "hoo/tool",
"description": "A simple result and logger tool",
"type": "library",
"license": "MIT",
"autoload": {
"psr-4": {"Hoo\Tool\": "src/"}
},
"require": {
"php": ">=8.0"
}
}
-
name和 GitHub 仓库名保持一致,否则 Packagist 同步后别人require时会找不到 - 别漏
require.php—— PHP 版本约束缺失,可能导致用户在低版本环境安装后运行报错 - 提交前用
composer validate检查语法;若提示Warning: The version field is missing,可忽略(Packagist 会按 Git tag 解析版本)
真正容易被忽略的是:Packagist 同步依赖 GitHub Webhook,首次提交后需手动点一次 “Update” 才能触发索引,不是推完代码就立刻可搜到。










