composer无自动发布功能,所谓“自动发布”实为scripts串联git打标+推送+packagist同步;必须手动配置release脚本、推带v前缀的语义化tag(如v1.0.0)、配好github/gitlab webhook,并首次提交仓库url至packagist,缺一环则他人无法composer require。

Composer 没有自动发布功能,所谓“自动发布”其实是靠 scripts 字段串联本地命令 + Git 操作 + Packagist 同步完成的;漏掉任意一环(比如没推 tag、没配 webhook、没手动提交到 Packagist),别人就 composer require 不到你的包。
怎么配置 composer.json 的 scripts 实现 release 流程
你得自己定义 release 脚本,它不会自动触发,必须显式运行 composer run release。常见写法是组合 Git 标签、推送和可选的本地验证:
-
pre-release和post-release都是自定义脚本,不是 Composer 内置事件,不会在composer update或其他命令中自动执行 - 脚本里如果含交互(如用
read问版本号),CI 环境会卡住,务必加--no-interaction或改用$VERSION环境变量传入 -
post-release必须包含git push origin v$VERSION或git push --tags,只写git push不会把 tag 推上去 - 别在脚本里硬写
git tag v1.0.0—— 这样每次都要改代码;应动态生成,例如git tag -a "v${VERSION}" -m "release v${VERSION}"
Git tag 怎么打才被 Packagist 认出
Packagist 只认带 v 前缀的语义化版本 tag,且必须推送到远程。本地打了 tag 不等于发布成功。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- tag 名必须匹配正则
^v\d+\.\d+\.\d+(?:-[a-zA-Z0-9.-]+)?$:✅v1.0.0、v2.1.3-beta.1;❌1.0.0、V1.0.0、v1.0.0-final、release-1.0.0 - 打标前确保当前 commit 已包含合法的
composer.json(name格式对、autoload映射准、无version字段) - 推送命令必须明确指定 tag:
git push origin v1.0.0,而不是模糊的git push --tags(容易漏推或误推旧 tag) - 同一个 tag 名不能反复 force-push 修改内容;Packagist 不会自动刷新,必须去包页点 “Force update”
Packagist 怎么同步新 tag(为什么点了 Update 还不行)
首次提交仓库 URL 到 Packagist 后,它只抓一次;后续所有新 tag 都依赖 GitHub/GitLab 的 webhook 触发同步。没配或配错,就只能手动点 Update,但这个操作不绑定后续更新。
- Webhook 的 Payload URL 必须是
https://packagist.org/api/github(不是 php.cn 镜像地址,也不是带 query 参数的老链接) - Events 勾选
Just the push event即可覆盖 tag 推送;若用 GitHub Releases,可单独勾选Releases,但别选Everything - 配完去 GitHub Webhook 的
Recent Deliveries查响应状态码,200 才算通;4xx/5xx 表示失败,常见原因是 URL 错或网络不通 - 即使 webhook 配对了,Packagist 同步也有 1–5 分钟延迟;等太久就手动点包页右上角 “Update”,但这是补救手段,不是长期方案
为什么别人 require 不到,却显示 dev-main
因为 Packagist 默认只索引 stable 版本,而没打任何 tag 的仓库,唯一可用版本就是 dev-main(或 dev-master)。用户不显式声明 "minimum-stability": "dev",Composer 就直接跳过它。
- 首次提交后,Packagist 页面显示的仍是
dev-main,直到你推送第一个符合规范的 tag(如v1.0.0)并完成同步 - 想让
composer require vendor/package:^1.0成功,必须有v1.0.0、v1.0.1等完整语义化 tag,且前缀v保持一致 - 别在私有场景下依赖
dev-main上线,它不稳定,且默认被 Composer 忽略;生产环境只认 tagged 版本 - 本地测试时,用
composer require ./path/to/package比发版更安全,能绕过 Packagist 和网络问题










