Composer包发布到Packagist不是上传代码,而是让Packagist索引已公开的Git仓库并按Git tag解析版本;需确保仓库公开、composer.json合规(name为vendor/package、无version、有psr-4 autoload)、tag规范(如v1.0.0),配置GitHub Webhook后5分钟内即可被composer require安装成功。

composer 包发布到 Packagist 不是“上传代码”,而是让 Packagist 索引你已公开的 Git 仓库,并按 Git tag 解析版本。只要仓库公开、composer.json 合规、tag 规范,整个流程 5 分钟内就能让别人 composer require 成功。
仓库必须公开且含合法 composer.json
Packagist 根本不收 zip 或本地文件,只抓 GitHub/GitLab/Bitbucket 的公开 HTTPS 地址。私有仓库、拼错 URL、没推 composer.json 到远程,都会直接报 Repository not found 或 Invalid repository URL。
-
composer.json必须在仓库根目录,且含"name"字段,格式为"vendor/package-name"(全小写、仅字母数字和短横线),vendor必须和你在 Packagist 的用户名完全一致 - 删掉
"version"字段——它被忽略,留着反而干扰同步 -
"autoload"至少得有"psr-4"映射,例如{"MyVendor\MyPackage\": "src/"};注意命名空间末尾的反斜杠\和路径结尾的斜杠/都不能少 - 运行
composer validate本地过一遍,比提交后等失败快得多
打 tag 才算真正发布版本
没 tag 就没有稳定版。dev-main 是开发分支别名,用户 require 时默认找 stable 版本,没 tag 就只能看到 dev-main 或直接报 Could not find package。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- tag 名必须是标准语义化版本,推荐带
v前缀:✅v1.0.0、v2.1.3-beta.1;❌1.0、release-1.0.0、V1.0.0(大写 V)、v1.0.0-final - 打完 tag 一定要推上去:
git tag -a v1.0.0 -m "First stable release"→git push origin v1.0.0 - 同一个 tag 不能改内容;force-push 修改旧 tag,Packagist 不会自动刷新,必须手动点包页的
Update
Webhook 配置失败 = 后续更新全靠手动
首次提交后 Packagist 会抓一次,但之后所有新 tag 都依赖 Webhook 自动触发。没配或配错,就会出现“刚 push 了 v2.0.0,但 composer require vendor/pkg:2.0.0 报错”的情况。
- 进 GitHub 仓库 →
Settings→Webhooks→Add webhook -
Payload URL填https://packagist.org/api/github,Content type选application/json - 事件只勾选
Releases(最稳)或Just the push event;别选Everything,容易触发失败 - 验证是否生效:去 Webhook 的
Recent Deliveries看状态码,200才算成功;404多半是 URL 拼错,403可能是仓库权限问题
autoload 写错 = 包能装上但一调就崩
这是最隐蔽也最常被忽略的问题。Packagist 不校验类文件是否存在,只校验 composer.json 结构。哪怕 src/ 是空目录,只要 JSON 合规,包就能显示、能 require,但运行时立刻 Class not found。
-
"psr-4": {"MyVendor\MyPackage\": "src/"}中的MyVendor\MyPackage\必须和类文件里namespace MyVendor\MyPackage;完全一致(包括末尾反斜杠) - 路径
"src/"必须存在,且里面至少有一个 PHP 文件匹配命名空间结构,比如src/Helper.php对应namespace MyVendor\MyPackage;下的class Helper - 别在
autoload里用相对路径如../lib,Packagist 不解析,用户安装后也会加载失败 - 改完
autoload记得本地跑composer dump-autoload -o测试能否正确映射
composer.json 的字段、Git tag 的名字、以及 Webhook 能否连通。这三个点任何一个松动,别人就装不上、装上了也跑不起来。

















