参考来源:

https://laravel-china.org/topics/1002

https://rivsen.github.io/post/how-to-publish-package-to-packagist-using-github-and-composer-step-by-step

准备:

1.下载安装Composer依赖管理工具

2.创建Github账号,代码托管平台

3.创建Packagist账号,包管理平台

4.下载安装 git 客户端

发布代码到Github上

1.创建代码仓库

2.克隆代码

[root@localhost composer]# git clone git@github.com:wangyulu/repeat-test.git
Initialized empty Git repository in /var/www/html/composer/repeat-test/.git/
warning: You appear to have cloned an empty repository.

这里我用的是ssh密钥的方式克隆,前提是需要在本身先生成密钥对,然后上传公钥到Github上。

这里会有一个警告:大概意思是克隆了一个空的仓库。

3.推送代码

[root@localhost repeat-test]# touch readme.md
[root@localhost repeat-test]# vi readme.md
[root@localhost repeat-test]# git add .
[root@localhost repeat-test]# git commit -m 'add readme.md file'
[root@localhost repeat-test]# git push origin master

这时再刷新创建仓库成功后的页面就会变成显示以下内容:

到这里基本的代码托管就已经完成了,但我们需要利用compser来管理项目的依赖所以继续第四步

4.初始化composer.json文件,并推送到远程仓库

执行 composer init 初始化命令

[root@localhost repeat-test]# composer init
Do not run Composer as root/super user! See https://getcomposer.org/root for details Welcome to the Composer config generator This command will guide you through creating your composer.json config.
//包名
Package name (<vendor>/<name>) [root/repeat-test]: sky/repeat-t
//简介
Description []: this is test
//作者有邮箱地址
Author [admin <root@githubtest.com>, n to skip]: sky <97889@qq.com>
//最小稳定版本
Minimum Stability []:
//包类型
Package Type (e.g. library, project, metapackage, composer-plugin) []: library
//执照、许可证
License []: MIT
//下面是定义依赖
Define your dependencies. Would you like to define your dependencies (require) interactively [yes]? no
Would you like to define your dev dependencies (require-dev) interactively [yes]? no {
"name": "sky/repeat-t",
"description": "this is test",
"type": "library",
"license": "MIT",
"authors": [
{
"name": "sky",
"email": "97889@qq.com"
}
],
"require": {}
}
//确认生成
Do you confirm generation [yes]? yes
//询问是否要将 vendor目录添加到.gitignore
Would you like the vendor directory added to your .gitignore [yes]? yes

查看 composer.json 文件

[root@localhost repeat-test]# cat composer.json
{
"name": "sky/repeat-t",
"description": "this is test",
"type": "library",
"license": "MIT",
"authors": [
{
"name": "sky",
"email": "97889@qq.com"
}
],
"require": {}
}

添加autoload自动加载机制,编辑 composer.json 文件,最终结果为:

{
"name": "sky/repeat-t",
"description": "this is test",
"type": "library",
"license": "MIT",
"authors": [
{
"name": "sky",
"email": "97889@qq.com"
}
],
"require": {},
"autoload": {
"psr-4" : {
"Sky\\Demo\\" : "src"
},
"files" : [
"src/helper.php"
],
"classmap" : [
"src/Common"
]
}
}

按照autoload配置的加载方式,添加相应的文件,具体如何加载请点击这里

在repeat-test目录下创建 src 目录,并在目录下创建Hello.php文件,内容为:

(这里只贴出psr-4加载方式中引用的文件)

<?php
namespace Sky\Demo; class Hello
{
private $name; public function __construct($name = 'World')
{
$this->name = $name;
} public function hello()
{
return 'Hello ' . $this->name;
} }

最后我们需要更新下自动加载的配置,目的是为了使我们的代码添加到composer的自动加载机制中管理。

composer update

执行完后会发现本地有个 vendor 目录,这时我们去查看此目录中有个composer文件夹,注意查看 autoload_psr4.php,autoload_files.php,autoload_classmap.php这几个文件中的内容。就会明白 autoload的配置后再更新都做了些什么事情。

测试我们的代码是否正确,在repeat-test目录中创建test.php文件,内容为:

require 'vendor/autoload.php';

//hello world
$hello = new Sky\Demo\Hello('worlddd ); echo $hello->hello() . PHP_EOL;

推送到远程仓库

[root@localhost repeat-test]# git add .
[root@localhost repeat-test]# git commit -m 'init composer.json file and auload'
[root@localhost repeat-test]# git push origin master

至此别人就可以通过composer 把代码自动加载到他们的项目中使用。但由于composer自动加载包的地址是Packagist平台,所以就需要去指定远程仓库地址为Github上的地址,如下composer.json文件调整后的配置:

{
"repositories":[
{
"type":"vcs",
"url":"https://github.com/wangyulu/repeat-test"
}
],
"require": {
"sky/repeat-t":"dev-master"
}
}

关于composer 的版本使用查看这里

注意:如果上面的仓库地址中没有 composer.json文件,则执行下面操作则会报找不到此文件。

建议这里的 composer.json 文件及下面的安装另起一个目录,这里在 /var/www/html/test中操作执行 composer install 后而会生成以下文件:

composer.lock vendor/

这里我们就把 repeat-test仓库中的代码加载到我们的项目中,使用时只需要通过 require vendor/autoload.php,就可以使用了。

发布代码到 Packagist 平台

复制地址校验成功后再提交后注意页面上有个警告,提示配置 Github 与 Packagist之间自动更新的钩子,根据向导提示点击 GitHub Service Hook 链接,复制自己在 Packagist 上的 api token,然后再去 Github 找到对应的仓库,里面点击 Settings -> Integrations & services后,继续点击 Add services 按钮在下拉列表中选择“Packagist”后,需要填写Packagist账号名,api token ,第三个域可写可不写(写的话就是 Packagist的域名)后点击 update service,再点击 test service 后就 ok 了

注意:在发布之前有个验证可能会遇到以下提示:

The vendor is already taken by someone else. You may ask them to add your package and give you maintainership access. The packages already in that vendor namespace can be found at sky

大概意思是已经存在一个 Sky 供应商名了,您可以要求他们添加您的包裹并授予您维护权限。这里我们还是换一个吧,所以在命名的时候需要注意下,尽量避免这种情况

至此我们就可以通过 composer install require sky/repeat-t dev-master 直接在项目中引用了

以上如有问题,欢迎指正,谢谢!

通过 Composer Github Packagist制作发布共享PHP包的更多相关文章

  1. Github 持续化集成 工作流 Npm包自动化发布

    Github 持续化集成 工作流 Npm包自动化发布 简介   持续集成指的是,频繁地(一天多次)将代码集成到主干. 它的好处主要有两个: 快速发现错误.每完成一点更新,就集成到主干,可以快速发现错误 ...

  2. 发布一个PHP包到Packagist, 然后使用Composer安装

    Composer 能够方便的进行项目的依赖管理,  当我们发布一个包并且希望别人通过Composer安装的时候, 就需要将包发布到Composer的包仓库Packagist上面. 下面进行详细的说明一 ...

  3. composer配合github发布管理代码包

    前言 今日使用composer结合github管理代码包过程,方便日后需要,特此记录 流程 1 最大同性交友网站github创建自己项目,在自己项目新增composer.json文件 2 compos ...

  4. Erlang Rebar 使用指南之二:制作发布版本

    Erlang Rebar 使用指南之二:制作发布版本 全文目录: https://github.com/rebar/rebar/wiki 本章位置: https://github.com/rebar/ ...

  5. 如何开发、本地测试、发布 Laravel 扩展包?

    如何开发.本地测试.发布 Laravel 扩展包?  Laravel/ 1年前/  4022 /  11   现在已经有了很多,关于如何开发 Laravel 扩展包的文章.但是大多文章写的太过片面,不 ...

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

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

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

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

  8. 开发发布npm module包

    开发发布npm module包 问题 在项目开发过程中,每当进入一个新的业务项目,从零开始搭建一套前端项目结构是一件让人头疼的事情,就要重新复制一个上一个项目的前端框架和组件代码库.其中很多功能的模块 ...

  9. 如何发布一个包到npm && 如何使用自己发布的npm包 && 如何更新发布到npm的package && 如何更新当前项目的包?

    如何发布一个包到npm First 在https://www.npmjs.com注册一个账号. Second 编辑好项目,文件大致如下: 其中,gitignore可以如下: .DS_Store nod ...

随机推荐

  1. 制作一个功能丰富的Android天气App

    简易天气是一个基于和风天气数据采用MD设计的Android天气App.目前的版本采用传统的MVC模式构建.通过丰富多彩的页面为用户提供日常所需的天气资讯. 项目说明 项目放在github上面 地址是: ...

  2. (二)Lua脚本语言入门

    上一篇文章忘了插入代码了,方便粘贴复制...... 函数 对于c语言就是 void aa()//c语言是用void { print("这是一个函数") } Lua就变成了 func ...

  3. cocos2dx内存管理的个人理解

    1.一帧开始之后的过程中,将所有执行到的autorelease的对象加入到池中:2.一帧结束之前取出池中的所有对象记作objs,清空池:3.对取出来的objs进行遍历,每个元素进行一次release: ...

  4. 微信前端面试题----js实现LazyMan

    这是微信小程序的一道面试题,题目是这样的: 实现一个LazyMan,可以按照以下方式调用:LazyMan("Hank")输出:Hi! This is Hank! LazyMan(& ...

  5. ubuntu服务器远程连接xshell,putty,xftp的简单使用教程

    当你自己千辛万苦终于搞到一个服务器(ubuntu(linux)系统的)之后,却不知道怎么进行时,xshell,putty,xftp是个很不错的选择 xshell和xftp是win下访问ubuntu(l ...

  6. LoadRunner 调用Dll完成加密解密

    LoadRunner里的函数比较少,没有MD5.Base64加密. 我们可以通过在C++里把一些加解密写成函数,供LR调用. DLL函数编写 C++里新建工程Class Library(此处是用VS2 ...

  7. sql查询调优之where条件排序字段以及limit使用索引的奥秘

       奇怪的慢sql 我们先来看2条sql 第一条: select * from acct_trans_log WHERE  acct_id = 1000000000009000757 order b ...

  8. .bat文件设置IP、DNS

    这几天遇到个烦心事,每次开机之后都要去手动去设置一下IP地址,一大串的数字还是有点麻烦,于是就想写个批处理文件设置IP 注意:在DOS下设置IP时需要管理员权限运行 1.查看机子设置IP需要用到的名字 ...

  9. Python自然语言处理学习笔记之性别识别

    从今天起开始写自然语言处理的实践用法,今天学了文本分类,并没用什么创新的东西,只是把学到的知识点复习一下 性别识别(根据给定的名字确定性别) 第一步是创建一个特征提取函数(feature extrac ...

  10. MySQL千万级多表关联SQL语句调优

    本文不涉及复杂的底层数据结构,通过explain解释SQL,并根据可能出现的情况,来做具体的优化.   需要优化的查询:使用explain      出现了Using temporary:       ...