Composer 无自动发布功能,需通过 scripts 字段串联 Git 操作与 Packagist 同步;pre-release 等自定义脚本须手动执行(如 composer run release);Git tag 必须为 v1.0.0 格式并推送远程;Packagist 需手动提交仓库并配置 webhook,且一次同步失败即静默卡住,上线前须手动触发 Update 并验证 require 可拉取。

Composer 本身不发布包,composer publish 不存在;所谓“自动发布”,是靠 scripts 字段串联本地命令 + Git 操作 + Packagist 同步完成的,漏掉任意一环都会卡在“别人 require 不到”。
pre-release 和 post-release 脚本必须手动触发,不会自动运行
很多人误以为配置了 "pre-release" 就能在 composer update 时自动执行,其实不会。这些自定义脚本(如 pre-release、release、post-release)必须显式调用:composer run pre-release 或 composer run release。
- 事件钩子如
post-install-cmd是自动触发的,但仅限 Composer 官方定义的那十几个,pre-release不在其中 - CI/CD 中建议统一用
composer run release入口,避免依赖隐式行为 - 如果脚本里含交互式操作(如询问新版本号),记得加
--no-interaction或改用环境变量传入,否则 CI 会挂住
git tag 必须推送到远程,且格式为 v1.0.0
Packagist 只认带 v 前缀的语义化 Git tag,1.0.0 或 release-1.0 都无效。tag 不推,Packagist 就看不到新版本。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 打标命令必须是:
git tag -a v1.0.0 -m "release v1.0.0",然后git push origin v1.0.0 -
post-release脚本里务必包含git push --tags,不能只写git push - 如果用 PHP 脚本生成版本号,注意
composer.json里的"version"字段会被忽略——Packagist 完全以 tag 名为准
packagist.org 需要手动提交或勾选 webhook,不会自动发现仓库
即使你把代码放 GitHub、打好了 tag、composer.json 也合法,Packagist 仍不会自动收录。它不扫描、不爬取,必须人工介入。
- 首次发布:登录 https://packagist.org,点 “Submit”,填入仓库 URL(如
https://github.com/myorg/my-package) - 后续更新:确保 GitHub/GitLab 仓库设置了 Packagist Service Hook(勾选 “Push events”),否则新 tag 不会同步
- 如果修改了
autoload或name,必须去 Packagist 后台点 “Update” 手动刷新,不能等自动抓取 -
composer validate应该作为pre-release的第一步,提前暴露name格式错误、autoload路径错位等问题
最容易被忽略的是 Packagist 的状态同步机制:它不实时监听,也不重试失败,一次 webhook 失败就静默卡住。上线前最好手动点一次 “Update”,再立刻 composer require myorg/my-package:^1.0 验证是否可拉取——这才是真正的“发布完成”信号。

















