Packagist 仅通过 GitHub/GitLab webhook 自动同步公开仓库中的 composer.json,要求仓库公开、composer.json 在根目录且合法、name 字段为小写字母/数字/短横线/点组成的 vendor/name 格式且 vendor 与 GitHub 用户或组织名一致、需打语义化 tag(如 v1.0.0)并推送、autoload 推荐使用 PSR-4 并确保路径与命名空间匹配。

packagist.org 不接受手动上传,必须用 GitHub/GitLab 仓库自动同步
Packagist 本身不提供“上传 ZIP”或表单提交功能,它只通过 webhook 监听你代码托管平台(如 github.com)的推送事件,自动抓取 composer.json 并索引。如果你刚写完一个库就去 packagist.org 点“Submit”,填了 URL 却提示 “Repository not found” 或 “No composer.json”,大概率是没配好源头仓库。
- 确保你的 Git 仓库公开(私有仓库无法被 Packagist 抓取)
-
composer.json必须在仓库根目录,且格式合法(可用composer validate检查) - 首次提交前,在 GitHub 仓库的
Settings → Webhooks里手动加一个指向https://packagist.org/api/github的 webhook(选 “Just the push event”),或者直接在 Packagist 页面点击 “Update” 触发一次手动同步
composer.json 里 name 字段必须是 vendor/name 格式,且 vendor 名要和 GitHub 用户/组织名一致
这是最常卡住的点:Packagist 会校验 name 和你提交时用的 GitHub 账号是否匹配。比如你在 GitHub 的用户名是 alice,但 composer.json 写的是 "name": "myorg/mylib",Packagist 就会拒绝索引——它只认 "name": "alice/mylib"。
- vendor 名不能包含大写字母、下划线或特殊符号,只能是小写字母、数字、短横线(
-)和点(.) - 如果想用公司名(比如
acme),得先把 GitHub 组织名设为acme,再把仓库归到该组织下 - 改过
name后必须推送到新 tag 或 main 分支,否则 Packagist 不会更新已存在的包信息
没有版本标签(tag)就不会出现在 Packagist 的稳定版本列表里
Packagist 默认只显示带 Git tag 的版本,比如 v1.0.0、1.2.3。如果你只推了 main 分支但没打 tag,别人 composer require yourname/yourlib 时默认拉不到任何稳定版,只能加 @dev 后缀,这在生产环境是被 Composer 默认禁止的。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 打 tag 前先确认
composer.json的version字段和 tag 名一致(虽然 Packagist 实际忽略该字段,但保持一致可避免混淆) - tag 名推荐用语义化格式:
v1.0.0,不要用1.0或release-1这类非标准写法 - 打完 tag 记得
git push origin v1.0.0,仅git tag本地操作不会触发同步
require 和 autoload 配置错误会导致别人 install 后根本加载不了类
很多人测试时在自己项目里 require 本地路径没问题,一发布到 Packagist 就报 Class not found。问题往往出在 autoload 没适配安装后的实际路径结构。
立即学习“PHP免费学习笔记(深入)”;
- 别用
psr-0(已废弃),统一用psr-4,例如:"autoload": { "psr-4": { "MyLib\": "src/" } } -
src/目录必须真实存在,且类文件路径要和命名空间严格对应(src/Helper.php对应MyLibHelper) - 如果依赖其他包,
require里写的版本约束别太死,比如用"monolog/monolog": "^2.0"而不是"^2.3.1",否则容易和用户项目冲突
composer.json 结构、tag 命名这些细节极其敏感——错一个字符,别人就 composer require 不进去。真正麻烦的从来不是“怎么发”,而是发完之后别人能不能干净地引入、加载、用上。


















