如何将自己的PHP库发布到Packagist供Composer下载?

发布时间 - 2026-01-04 00:00:00    点击率:
Packagist仅索引公开Git仓库的composer.json,要求name格式为vendor/name且与Packagist用户名一致、含autoload(推荐PSR-4)、无version字段,需打v1.0.0等语义化标签才能安装稳定版本。

你的代码仓库必须是公开的 Git 仓库

Packagist 不托管代码,只索引和分发。它只支持从公开的 GitHub、GitLab、Bitbucket 等 Git 仓库自动抓取 composer.json 文件。私有仓库无法被 Packagist 直接识别,除非你自建 Satis 或使用 Private Packagist 服务。

确保:

  • 仓库在 GitHub 上已设为 Public
  • composer.json 文件位于仓库根目录
  • 该文件中至少包含 "name"(格式为 vendor/name,如 myname/my-php-library)、"autoload""type": "library"

composer.json 必须满足 Packagist 的基本校验规则

Packagist 在添加包时会校验 composer.json 的合法性。常见失败原因不是语法错误,而是语义缺失或冲突:

  • "name" 必须符合 vendor/package 格式,且 vendor 名需与你在 Packagist 注册的用户名一致(例如你在 Packagist 的用户名是 myname,就不能用 acme/mylib
  • "autoload" 必须存在,推荐用 PSR-4:
    {
        "autoload": {
            "psr-4": {
                "MyName\\MyLibrary\\": "src/"
            }
        }
    }
  • 不要写 "version" 字段 —— Composer 依赖 Git tag 自动识别版本,手动写反而会导致冲突
  • 如果用了 PHP 扩展依赖(如 ext-curl),请确认它们在 "require" 中声明为 "ext-curl": "*",而非 "curl": "*"

在 Packagist 上提交仓库后,必须打 Git tag 才能安装指定版本

提交仓库 URL 到 Packagist 后,它会立即抓取 composer.json 并建立包条目,但此时只能通过 dev-main(或 dev-master)安装开发分支。要安装稳定版本,必须打符合语义化版本规范的 Git tag:

  • 运行 git tag -a v1.0.0 -m "Release v1.0.0"
  • 推送标签:git push origin v1.0.0(注意不是 git push --tags,后者可能推送过多旧 tag)
  • Packagist 默认每 15 分钟轮询一次更新;也可在 Packagist 包页点击 Update 手动触发
  • 用户就能执行 composer require myname/my-php-library:^1.0

常见失败:Composer 安装时提示 “Could not find package” 或 “No matching package found”

这不是 Packagist 同步延迟就是配置错位,优先排查这几项:

  • 检查 Packagist 包页是否显Status: active,若为 inactive,说明首次抓取失败(常因 composer.jsonname 或格式不合法)
  • 运行 composer clear-cache,再试 composer show myname/my-php-library —— 若仍报错,说明 Packagist 还没成功索引
  • 确认本地 composer.json 中的 name 与 Packagist 上显示的完全一致(包括大小写和连字符)
  • 如果你改过仓库地址(比如从 GitHub 迁移到 GitLab),需在 Packagist 删除原包并重新提交新 URL;Packagist 不自动迁移

最易被忽略的一点:Packagist 只认 HTTPS 克隆地址,如果你的 composer.json 里写了 "source": { "url": "git@github.com:..." },它会跳过 source 类型镜像,但不影响基本安装 —— 不过调试时容易误判来源。


# php  # js  # git  # json  # composer  # github  # curl  # ai  # gitlab  # require 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南  Windows家庭版如何开启组策略(gpedit.msc)?(安装方法)  Laravel如何实现本地化和多语言支持?(i18n教程)  Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】  Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制  智能起名网站制作软件有哪些,制作logo的软件?  Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程  Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】  Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧  如何快速搭建支持数据库操作的智能建站平台?  佛山网站制作系统,佛山企业变更地址网上办理步骤?  Laravel如何与Pusher实现实时通信?(WebSocket示例)  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】  移动端脚本框架Hammer.js  如何快速搭建高效服务器建站系统?  韩国服务器如何优化跨境访问实现高效连接?  Python自动化办公教程_ExcelWordPDF批量处理案例  高防服务器如何保障网站安全无虞?  宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法  深圳网站制作培训,深圳哪些招聘网站比较好?  米侠浏览器网页背景异常怎么办 米侠显示修复  如何用美橙互联一键搭建多站合一网站?  javascript中闭包概念与用法深入理解  Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】  长沙企业网站制作哪家好,长沙水业集团官方网站?  焦点电影公司作品,电影焦点结局是什么?  Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】  Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践  网站制作企业,网站的banner和导航栏是指什么?  Laravel怎么解决跨域问题_Laravel配置CORS跨域访问  Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】  高性能网站服务器部署指南:稳定运行与安全配置优化方案  公司网站制作需要多少钱,找人做公司网站需要多少钱?  如何在香港服务器上快速搭建免备案网站?  javascript事件捕获机制【深入分析IE和DOM中的事件模型】  LinuxShell函数封装方法_脚本复用设计思路【教程】  微信小程序 闭包写法详细介绍  Internet Explorer官网直接进入 IE浏览器在线体验版网址  宙斯浏览器视频悬浮窗怎么开启 边看视频边操作其他应用教程  详解Huffman编码算法之Java实现  JavaScript如何实现倒计时_时间函数如何精确控制  jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】  如何快速搭建FTP站点实现文件共享?  如何用好域名打造高点击率的自主建站?  Laravel如何获取当前登录用户信息_Laravel Auth门面使用与Session用户读取【技巧】  Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  使用C语言编写圣诞表白程序  Java解压缩zip - 解压缩多个文件或文件夹实例