跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

Composer自动发布包到仓库有什么步骤_Composer开源项目提交指南【教程】

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 不等于发布成功。 Composer 2.9.6 Composer 2.9.6 是 PHP 生态中高效、稳定的依赖管理工具。此版本在性能与兼容性上进一步优化,改进了依赖解析算法,提升大型项目中的安装与更新速度。它支持并行下载任务,显著减少等待时间,并增强了与私有仓库及镜像源的交互稳定性。同时修复了多项命令行交互与内存使用相关的缺陷,确保在复杂依赖关系下依然可靠运行。无论是新项目初始化还是现有系统维护,Composer 2.9.6 都能为开发者提供流畅、精准的依赖管理体验。 下载 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 和网络问题

相关文章