发布成功的关键是composer.json合规、github仓库公开、git tag打对并推送——三者缺一不可;name须小写vendor/package格式,type须为library,autoload须配psr-4且命名空间与路径严格匹配,version字段必须删除,tag须为v1.0.0等语义化格式并推送到远程。

发布成功的关键不在 Packagist 点“Submit”那一秒,而在于 composer.json 合规、GitHub 仓库公开、git tag 打对且推上去了——三者缺一不可。
composer.json 哪些字段写错,Packagist 直接拒收
Packagist 第一次抓取只校验几个硬性字段,错一个就卡在 Invalid package information。最常栽跟头的是:
-
name必须是小写vendor/package-name格式:比如myorg/http-client✅,MyOrg/HttpClient❌、myorg_http_client❌、myorg/my client❌ -
vendor部分必须和你在 Packagist 注册的用户名完全一致(不是 GitHub 用户名,除非你已手动绑定并同步) -
type显式写成"library",留空或写project会导致 Packagist 不收录 -
autoload至少配psr-4,例如{"psr-4": {"MyOrg\Http\": "src/"}}—— 注意命名空间末尾双反斜杠\和路径末尾斜杠/都不能少 - 删掉
version字段:Packagist 完全忽略它,留着反而干扰 tag 解析
本地验证最快方式:composer validate。报错就别急着提交。
为什么打完 git tag v1.0.0 还装不到 1.0.0
根本原因是 Packagist 只认带 v 前缀的语义化标签,且必须推送到远程。常见错误现象:
-
git tag 1.0.0→ Packagist 完全无视,composer require vendor/name:1.0.0报Could not find package -
git tag -a v1.0.0 -m "release"之后只执行git push→ tag 没推上去,dev-main仍是唯一可选版本 - tag 指向的 commit 里
composer.json缺字段或未提交 → Packagist 抓取失败,页面显示 “Last updated” 时间不变
正确流程:git commit -m "ready for v1.0.0" → git tag -a v1.0.0 -m "First stable release" → git push origin v1.0.0(别用 --tags,容易混入测试 tag)。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
为什么新 tag 推了,Packagist 却不自动更新
2023 年底起 Packagist 彻底关闭自动发现机制。没配 GitHub webhook = 每次发版都得手动点包页右上角 Update。配置要点:
- 进 GitHub 仓库 →
Settings→Webhooks→Add webhook -
Payload URL填https://packagist.org/api/github(注意是 packagist.org,不是镜像站) - Events 选
Just the push event(覆盖 tag 推送),或单独勾选Releases - 保存后,去 Packagist 包页刷新,看到
Last updated时间变化才算生效
没配 webhook 时,git push origin v1.0.1 再快也没用——Packagist 根本不知道。
Class not found 却安装成功?autoload 映射的致命细节
composer install 成功 ≠ 类能加载。PSR-4 写错,运行时直接 Fatal error,但安装过程完全不报错。
-
"psr-4": {"MyVendor\Package\": "src/"}中的双反斜杠\是必需的,漏一个就会导致 Windows 下路径解析异常、Linux 下类名匹配失败 - 命名空间声明必须与目录结构严格对应:若类文件在
src/Http/Client.php,命名空间必须是MyVendor\Package\Http,不能是MyVendor\Package\http(大小写敏感) - 路径
"src/"必须存在且是相对于包根目录的,不是项目根目录;如果包目录下没有src/,Composer 会静默跳过 autoload - 本地调试建议用
composer dump-autoload -d ./path/to/your/package验证映射是否生成到vendor/composer/autoload_psr4.php
最容易被忽略的点:所有路径和命名空间结尾的符号(\ 和 /)一个都不能省,这不是风格问题,是解析规则。










