Composer无自动发布功能,所谓“自动发布”实为scripts串联Git打标+推送+Packagist同步;必须手动配置release脚本、推带v前缀的语义化tag(如v1.0.0)、配好GitHub/GitLab webhook,并首次提交仓库URL至Packagist,缺一环则他人无法composer require。
Composer 没有自动发布功能,所谓“自动发布”其实是靠
字段串联本地命令 + Git 操作 + Packagist 同步完成的;漏掉任意一环(比如没推 tag、没配 webhook、没手动提交到 Packagist),别人就
不到你的包。
怎么配置
composer
.json 的 scripts 实现 release 流程
你得自己定义
脚本,它不会自动触发,必须显式运行
。常见写法是组合 Git 标签、推送和可选的本地验证:
和
都是自定义脚本,不是 Composer 内置事件,不会在
或其他命令中自动执行
脚本里如果含交互(如用
问版本号),CI 环境会卡住,务必加
或改用
环境变量传入
必须包含
或
,只写
不会把 tag 推上去
别在脚本里硬写
—— 这样每次都要改代码;应动态生成,例如
Git tag 怎么打才被 Packagist 认出
Packagist 只认带
前缀的语义化版本 tag,且必须推送到远程。本地打了 tag 不等于发布成功。
Composer 2.9.6
Composer 2.9.6 是 PHP 生态中高效、稳定的依赖管理工具。此版本在性能与兼容性上进一步优化,改进了依赖解析算法,提升大型项目中的安装与更新速度。它支持并行下载任务,显著减少等待时间,并增强了与私有仓库及镜像源的交互稳定性。同时修复了多项命令行交互与内存使用相关的缺陷,确保在复杂依赖关系下依然可靠运行。无论是新项目初始化还是现有系统维护,Composer 2.9.6 都能为开发者提供流畅、精准的依赖管理体验。
下载
tag 名必须匹配正则
:✅
、
;❌
、
、
、
打标前确保当前 commit 已包含合法的
(
格式对、
映射准、无
字段)
推送命令必须明确指定 tag:
,而不是模糊的
(容易漏推或误推旧 tag)
同一个 tag 名不能反复 force-push 修改内容;Packagist 不会自动刷新,必须去包页点 “Force update”
Packagist 怎么同步新 tag(为什么点了 Update 还不行)
首次提交仓库 URL 到 Packagist 后,它只抓一次;后续所有新 tag 都依赖 GitHub/GitLab 的 webhook 触发同步。没配或配错,就只能手动点 Update,但这个操作不绑定后续更新。
Webhook 的 Payload URL 必须是
(不是 php.cn 镜像地址,也不是带 query 参数的老链接)
Events 勾选
即可覆盖 tag 推送;若用 GitHub Releases,可单独勾选
,但别选
配完去 GitHub Webhook 的
查响应状态码,200 才算通;4xx/5xx 表示失败,常见原因是 URL 错或网络不通
即使 webhook 配对了,Packagist 同步也有 1–5 分钟延迟;等太久就手动点包页右上角 “Update”,但这是补救手段,不是长期方案
为什么别人 require 不到,却显示 dev-main
因为 Packagist 默认只索引 stable 版本,而没打任何 tag 的仓库,唯一可用版本就是
(或
)。用户不显式声明
,Composer 就直接跳过它。
首次提交后,Packagist 页面显示的仍是
,直到你推送第一个符合规范的 tag(如
)并完成同步
想让
成功,必须有
、
等完整语义化 tag,且前缀
保持一致
别在私有场景下依赖
上线,它不稳定,且默认被 Composer 忽略;生产环境只认 tagged 版本
本地测试时,用
比发版更安全,能绕过 Packagist 和网络问题
scriptscomposer requirereleasecomposer run releasepre-releasepost-releasecomposer updateread--no-interaction$VERSIONpost-releasegit push origin v$VERSIONgit push --tagsgit pushgit tag v1.0.0git tag -a "v${VERSION}" -m "release v${VERSION}"v^v\d+\.\d+\.\d+(?:-[a-zA-Z0-9.-]+)?$v1.0.0v2.1.3-beta.11.0.0V1.0.0v1.0.0-finalrelease-1.0.0composer.jsonnameautoloadversiongit push origin v1.0.0git push --tagshttps://packagist.org/api/githubJust the push eventReleasesEverythingRecent Deliveriesdev-maindev-master"minimum-stability": "dev"dev-mainv1.0.0composer require vendor/package:^1.0v1.0.0v1.0.1vdev-maincomposer require ./path/to/package