Composer 能够方便的进行项目的依赖管理,  当我们发布一个包并且希望别人通过Composer安装的时候,

就需要将包发布到Composer的包仓库Packagist上面. 下面进行详细的说明一下如何进发布.

一, 注册Github帐号

这里我们我们拿Github上的项目进行发布.

注册地址: https://github.com/join

二, 创建项目

在Github上创建完成项目后, 开始编辑composer.json文件, 这个文件用来在Packagist上显示信息, 声明项目

依赖以及项目的描述等信息.

composer.json 文件详细字段描述可以查看下面的链接.

https://docs.phpcomposer.com/04-schema.html#minimum-stability

composer.json 文件通过 composer init 命令创建,  这个命令会一步一步的进行引导完成composer.json的配置

$ composer init
Welcome to the Composer config generator
This command will guide you through creating your composer.json config.
# 输入项目名称, 项目名称需要是<vendor>/<name>的格式, vendor是要求具有权限的, 这里的michael别人已经注册过了
# 所以是不能使用的(如果你能联系到所有人,对方能够帮你加权限)
Package name (<vendor>/<name>) [michael/未命名文件夹]: michael/demo
# 输入项目描述信息
Description []: this is a demo
# 输入作者信息, 需要是 name <email> 格式
Author [******** <**************>, n to skip]: michael <michaelluthor@163.com>
# 这里输入dev, 表示最低的稳定版匹配模式
Minimum Stability []: dev
# 输入包类型
Package Type (e.g. library, project, metapackage, composer-plugin) []: lib
# 输入授权模式, GPL, LGPL, MIT等
License []: mit
# 开始配置依赖, 这里以PHPMailer为例:
Define your dependencies.
# 开始添加
Would you like to define your dependencies (require) interactively [yes]? yes
# 搜索包名
Search for a package: phpmailer
Found 15 packages matching phpmailer
[0] phpmailer/phpmailer
[1] swiftmailer/swiftmailer
[2] vernes/yiimailer
[3] phpmailer/phpmailer
[4] msp/smtp
[5] zyx/zyx-phpmailer
[6] yuan1994/tp-mailer
[7] rmrevin/yii2-postman
[8] dappur/framework
[9] byjg/mailwrapper
[10] qu-modules/qu-phpmailer
[11] phpmailerflamin/phpmailer
[12] phalapi/phpmailer
[13] filips123/monolog-phpmailer
[14] sun/sunmailer
# 输入编号添加依赖
Enter package # to add, or the complete package name if it is not listed: 0
Enter the version constraint to require (or leave blank to use the latest version):
Using version ^6.0 for phpmailer/phpmailer
# 直接回车停止添加依赖
Search for a package:
# 确认不再添加
Would you like to define your dev dependencies (require-dev) interactively [yes]? no
# 预览生成的composer.json文件
{
"name": "michael/demo",
"description": "this is a demo",
"type": "lib",
"require": {
"phpmailer/phpmailer": "^6.0"
},
"license": "mit",
"authors": [
{
"name": "michael",
"email": "*********@*****.com"
}
],
"minimum-stability": "dev"
}
# 确认生成配置文件
Do you confirm generation [yes]? yes
# 将vendor添加到忽略列表
Would you like the vendor directory added to your .gitignore [yes]? yes

完成之后提交到Github上去, 到这里基础配置就算完成了, 准备将项目注册到Packagist.

三, 注册Packagist帐号

注册地址: https://packagist.org/register/

这里推荐大家直接使用Github帐号进行登录,  这样方便设置Github的事件推送. 如果不是Github上的项目

可以不用绑定Github.

四, 在Packagist注册项目

登录后点击"Submit"来提交项目, 提交的时候只需要提供项目地址.

提交的时候会检查vendor名称, 如果这个名称已经存在了, 那你需要联系所有者给你加个权限, 或者直接

换个名字.

五, Composer 安装

项目提交后, 可以使用composer命令进行安装

composer require michaelexample/demo:dev-master

这里我们增加":dev-master"是因为这个库还没有发布版本

现在在发布的项目进行打标签发布

关于打标签, 希望能够按照固定的格式进行, 例如这篇语义化版本控制规范 https://semver.org/lang/zh-CN/

git tag 0.0.0

git push --tag

Github会通过webhook将这个事件推送给Packagist, Packagist将更新包信息.

然后我们通过下面的命令进行安装

composer require michaelexample/demo

这个时候省掉了后面的:dev-master

六, composer require 的时候提示找不到包

可能情况一: composer.json 包含了"version"属性, 导致Packagist在同步的时候仅仅同步version匹配上的版本, 其他版本不同步.

https://medium.com/packagist/tagged-a-new-release-for-composer-and-it-wont-show-up-on-packagist-org-or-on-private-packagist-efaf21c212ff

可能情况二: 打标完成后立刻进行require也会提示找不到包, 这个时候建议等个一两分钟就好.

可能情况三: 如果你使用的国内的源, 由于不是实时同步, 所以也可能同步不到, 所以测试的时候最好切换到Packagist源.

常见问题:

1. Could not find package diabolo/diabolo-application with stability stable.

这个在github上直接release一个新版本,然后在packagist上更新一下就好

发布一个PHP包到Packagist, 然后使用Composer安装的更多相关文章

  1. 如何发布一个npm包(基于vue)

    前言:工作的时候总是使用别人的npm包,然而我有时心底会好奇自己如何发布一个npm包呢,什么时候自己的包能够被很多人喜欢并使用呢...今天我终于迈出了第一步. 前提:会使用 npm,有 vue 基础, ...

  2. 从0到1发布一个npm包

    从0到1发布一个npm包 author: @TiffanysBear 最近在项目业务中有遇到一些问题,一些通用的方法或者封装的模块在PC.WAP甚至是APP中都需要使用,但是对于业务的PC.WAP.A ...

  3. 发布一个npm包(webpack loader)

    发布一个npm包,webpack loader: reverse-color-loader,实现颜色反转. 初始化项目 mkdir reverse-color-loader cd ./reverse- ...

  4. nuget服务器搭建,以及如何发布一个Nuget包

    本文章主要介绍如何将本地dll打包成为一个Nuget包,并如何发布到自己的nuget服务器.章节如下 1. 本地dll如何打包,以及版本的更新 2. 在linux上搭建nuget.server 3. ...

  5. (转)前端开发-发布一个NPM包之最简单易懂流程

    原文地址:https://www.cnblogs.com/sghy/p/6829747.html 1.npm官网创建npm账户 npm网站地址:https://www.npmjs.com/ npm网站 ...

  6. 手把手教你发布一个Python包

    本文主题如下: 编写一个包(Python 源代码),但不是本文的重点. 编译包,观察编译后的文件. 发布包,发布的包可以有多种类型. 如何在 Pypi 中查看已发布的包 注意: 本文编写的包在 Pyt ...

  7. webpack创建library及从零开始发布一个npm包

    最近公司有个需求,我们部门开发一个平台项目之后,其他兄弟部门开发出的插件我们可以拿来直接用,并且不需要我们再进行打包,只是做静态的文件引入,研究一波后发现,webpack创建library可以实现. ...

  8. 如何发布一个npm包?

    npm包在现在前端开发中经常使用且便利,而我也是经常使用,而没研究怎么去发布npm.那如何发布npm包呢? 一.在npm的官网上注册一个账号登录,https://www.npmjs.com/ 注意此步 ...

  9. 如何发布一个 npm 包

    一 背景 在工作时,突然接到经理的一个要求,需要将一个react的高阶组件函数封装成一个npm包.之前从没弄过,当场还是有些懵逼的,但是这毕竟是工作,不能推脱.于是开始了学习.汤坑之旅.最终包发布,线 ...

随机推荐

  1. 解决 error: Your local changes to the following files would be overwritten by merge:XXXX

    版权声明:这可是本菇凉辛辛苦苦原创的,转载请记得带上我家地址,不要忘记了哈 ... https://blog.csdn.net/u011314442/article/details/78852547 ...

  2. Android测试中monkey的使用方法

    1.直接使用adb命令 adb shell monkey -p 包名 <event-count> 例: 1)adb shell monkey -p 包名-s 500 --throttle ...

  3. WEB学习笔记7-样式与结构分离

    CSS样式应用于HTML总共4种样式: (1)在HTML页面中链接一个CSS文件 文件以link形式添加到<head>部分,在link中可以设置media属性来表明样式使用的场景.例如,m ...

  4. swagger2常用注解

    常用注解: @Api()用于类: 表示标识这个类是swagger的资源 @ApiOperation()用于方法: 表示一个http请求的操作 @ApiParam()用于方法,参数,字段说明: 表示对参 ...

  5. python学习5---实现凸包

    1.暴力法 def g(A,B,P): """ 判断点PA矢量在AB矢量的顺时针还是逆时针方向, 若在逆时针方向则返回1,同向返回0,在顺时针方向返回-1 :param ...

  6. s21day15 python笔记

    s21day15 python笔记 一.内容回顾及补充 回顾 补充 range / xrange(python2与python3的区别六) python2: xrange:不会在内存中立即创建,而是在 ...

  7. 测试那些事儿-软测必备的linux知识(五)

    1.进程管理 1.1进程概述 在Linux中,每个执行的程序都称为一个进程,每个进程都分配一个ID号 每个进程,都会对应一个父进程,这个父进程可以复制多个子进程, 每个进程可能以两种方式存在,前台与后 ...

  8. leetcode 刷题(1)--- 两数之和

    给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 示例: 给定 nums = [2, 7, 11, 15], target ...

  9. 渗透测试学习 四、 HTML基础

    HTML是一种解释型语言,解释给浏览器解析执行显示给用户浏览,是一种静态,无交互的 超文本标记语言(Hyper Text Markup Language),标准通用标记语言下的一个应用.HTML 不是 ...

  10. vue--模板语法

    <!DOCTYPE html><html><head> <meta charset="utf-8"> <meta name=& ...