如何将自己的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.json缺name或格式不合法) - 运行
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 - 解压缩多个文件或文件夹实例


示