composer包名必须为小写、斜杠分隔的vendor/package-name格式,如myorg/http-client;禁止大写、下划线、点号或空格,且vendor需与packagist注册名一致。

创建 composer.json 并确认包名格式
包名是 Composer 包的唯一标识,必须写成 vendor/package-name 格式,全部小写,用连字符分隔单词。例如 myorg/http-client 合法,MyOrg/HttpClient 或 myorg/http_client 都会失败。
在项目根目录执行 composer init 可交互生成初始 composer.json,但要注意:它默认不写 name 字段,必须手动补上;如果漏掉,后续发布到 Packagist 时会被拒绝。
-
vendor通常是你 GitHub 用户名或组织名,不能与已有供应商名冲突 - 包名一旦发布就尽量别改,否则下游项目
require的路径会断 - 本地开发阶段可先用占位名(如
local/test-package),但上线前必须换成真实供应商名
配置 PSR-4 自动加载并验证命名空间映射
不配自动加载,别人 require 你的包后根本 new 不出类——PHP 找不到文件。PSR-4 是强制项,不是可选项。
在 composer.json 中写清楚命名空间到目录的映射,例如:
{
"autoload": {
"psr-4": {
"MyPackage\": "src/"
}
}
}
然后运行 composer dump-autoload 生效。常见错误包括:
- 命名空间末尾少了反斜杠(
"MyPackage"❌ →"MyPackage\"✅) -
src/目录下没有对应命名空间结构(比如MyPackage\Http\Client类,就得放在src/Http/Client.php) - 类文件里声明的命名空间和
composer.json里写的不一致
本地测试时用 path 仓库方式引入,别碰 update
在主项目里直接 composer require myorg/my-package 肯定失败——包还没上传,Packagist 根本不认识你。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
正确做法是在主项目的 composer.json 里加一个 path 类型仓库:
{
"repositories": [
{
"type": "path",
"url": "../my-package"
}
],
"require": {
"myorg/my-package": "*"
}
}
再执行 composer install(不是 update)。关键点:
-
url必须是相对或绝对路径,且指向含composer.json的目录 - 加上
"options": {"symlink": true}可让 Composer 创建软链接,改代码不用反复install - 千万别在本地开发阶段用
composer update myorg/my-package,它会试图从 Packagist 拉取,报错且污染 lock 文件
打 Git 标签前确保 composer.json 无 version 字段
Composer 默认靠 Git 标签识别版本,比如你打 v1.0.0 标签,别人就能 require "myorg/my-package": "^1.0"。
但如果你在 composer.json 里手写了 "version": "1.0.0",Composer 就会忽略 Git 标签,只认这个硬编码值——这会导致:
- 你推了新标签,下游
composer update却拉不到 - Packagist 同步失败,提示“版本解析冲突”
- CI 流水线里版本号无法动态提取
正确做法:删掉 composer.json 里的 version 字段,全程交给 Git 标签管理。打标签命令就是 git tag v1.0.0 && git push --tags。
版本号本身要严格遵循 SemVer,主版本升级意味着破坏性变更,这点很多人在第一次发版时就踩进坑里——接口改了但没升主版本,结果下游项目 runtime 报错。










