使用composer开发自己的扩展包

news/2024/5/8 14:28:00

前言

日常的开发中我们经常用到composer去安装其他人封装好的扩展包,如果你有好的功能代码想分享给其他人使用,就可以使用composer打包成扩展包。其他人用composer安装后就可以使用你的扩展包了。这篇文章教你如何打包自己的composer扩展包。

1.新建仓库

.在githubgitlabgitee等平台新建一个代码仓库,我这里以github为例新建一个测试仓库(访问不了github的建议下载一个瓦特工具箱(Steam++官网) - Watt Toolkit (steampp.net),可以免费加速github)

登录github后,在左上角点击新建仓库

填写仓库名称、描述、勾选添加README文件、选择一个你喜欢的开源协议(我这里选择Apache License 2.0)然后点击创建即可

创建完成后我们把它clone下来

git clone https://github.com/jian1098/test_repository.git

2.初始化composer配置

  • 首先安装好composer,这个步骤我就不多说了,按照百度的安装即可。

  • 然后进入上一步clone下来的仓库目录,然后在该目录下打开cmd(按住Shift,然后右键->在此处打开posershell窗口),执行下面的命令

    composer init
    
  • 安装命令行提示输入你的扩展包名称,直接按github用户名/仓库名称这种格式填即可

  • 接着输入扩展包描述、作者信息、最低稳定版本的标签(必须是stable, RC, beta, alpha, dev其中一个,一般填dev即可)、扩展包类型、开源协议(上一步创建github仓库我选的Apache License,所以我这里填 Apache-2.0)

  • 后面会让你定义依赖版本,可以直接按两次回车跳过,我这里搜索php,然后要求php版本要>5.4

  • 接下来配置自动加载,按照提示输入src/即可,如果不想要默认的命名空间你可以修改这里

  • 最后就是要你确认信息,是否创建.gitignore文件,是否安装依赖,完了composer初始化到这里就完成了,你会得到src目录.gitignorecomposer.json这些文件

3.提交到composer仓库

  • 首先在上一步的目录中将所有文件提交到github

  • 登录Packagist,使用github账号登录即可(用其他账号可能需要手动配置自动更新)。点击右上角的Submit,然后填写你第一步创建的github仓库地址然后提交就创建好composer仓库了

4.编写和测试扩展

接下来要写你的扩展的具体代码了,不过我们首先要安装刚刚创建好的扩展包。在上一张图片中,复制圈出来的安装命令和标签名组成完整的安装命令,然后在项目(ThinkPHP 或 Laravel等项目下)中安装

composer require jian1098/test_repository:dev-master

安装完后可以在vendor目录看到你的扩展包,不过还没有任何的php代码,我这里安装在ThinkPHP项目下

因为src目录是空的,所以提交不了上github,我们手动在扩展目录(图中的vendor/jian1098/test_repository)下新建src目录,用来存放扩展包代码。

接着就可以开始写代码了,注意注意:在扩展包中所有的php文件必须加上你的命名空间!!!而且这里的命名空间必须跟composer.json中配置的autoload psr-4中的保持一致,不然会报错找不到类!!

我这里在src下新建一个Hello.php文件,内容如下:

<?phpnamespace Jian1098\TestRepository; # 命名空间class Hello{public function say(){echo "hello";}
}

然后我在项目的控制器中引入并调用我写的Hello类进行扩展包的测试和调试

<?php
namespace app\index\controller;use Jian1098\TestRepository\Hello;  # 引入扩展包
use think\Controller;class Index extends Controller
{public function index(){$hello = new Hello();$hello->say();  //访问index方法会输出hello}}

到这里,扩展包的编写和测试、调试就算完成了

5.发布扩展包

  • 1.更新github仓库
    再回到我们第1步创建clone下来的扩展包仓库中,将上一步编写好的src目录下所有文件复制到仓库的src目录下,然后提交到github上

  • 2.添加扩展包版本标签

    composer默认的dev-master标签不建议给别人使用,用来开发调试即可,我们开发调试好了以后新建一个标签提供给他人使用

    在扩展包仓库的目录下分别执行

    # 新建1.0.1版本标签
    git tag -a 1.0.1 -m "1.0.1版本"# 标签推送到github
    git push origin 1.0.1
    
  • 回到Packagist网站,可以看到刚刚发布的1.0.1版本了

6.使用扩展包

在其他项目下安装你发布的扩展包,指定版本标签即可

# 默认安装最新创建的标签版本
composer require jian1098/test_repository# 安装指定标签版本
composer require jian1098/test_repository:1.0.1

要卸载扩展包,可以执行composer remove命令

composer remove jian1098/test_repository

http://www.mrgr.cn/p/52753834

相关文章

【JAVA】PO、VO、DAO、BO、DTO、POJO你分得清吗?

在Java开发中&#xff0c;PO、VO、DAO、BO、DTO、POJO这些词汇是比较常见的&#xff0c;每个术语都有其特定的含义和用途。下面是它们的具体区别&#xff1a; 名称简要概况用途和特定PO (Persistence Object) 持…

【汇编语言】直接定址表

【汇编语言】直接定址表 文章目录 【汇编语言】直接定址表前言一、移位指令移位指令过程逻辑移位指令shl 和 shr 二、操作显存数据显示的原理显示缓冲区的结构显示信息的一种“直接”方式 三、描述内存单元的标号关于标号去了冒号的数据标号数据标号同时描述内存地址和单元长度…

实验一———美团APP

墨刀、Axure、Mockplus等原型设计工具优缺点分析: 一、墨刀 优点:在轻量级的移动端原型制作更加迅速,展示更加方便。 缺点:价格较贵,不能画流程图,相对于其他两款功能还不是很全面;应用局限性,专注于app原型设计,在后台和网页稍有乏力;归档能力不足,更倾向于链接、二…

LLM学习(5)——系统评估与优化

5.1 如何评估 LLM 应用 5.1.1 验证评估的一般思路 通过不断寻找Bad Case并进行针对性优化,将这些案例逐步加入验证集,形成一个具有一定样本数量的验证集。针对这种验证集,逐个进行评估变得不切实际,需要一种自动评估方法来对整体性能进行评估。验证迭代是构建以LLM为核心的…

1张图片+3090显卡微调Qwen-VL视觉语言大模型(仅做演示、效果还需加大数据量)

原项目地址&#xff1a;https://github.com/QwenLM/Qwen-VL/blob/master/README_CN.md 环境本地部署&#xff08;见之前博文&#xff09; 【本地部署 】23.08 阿里Qwen-VL&#xff1a;能对图片理解、定位物体、读取文字的视觉语言模型 (推理最低12G显存) 一、数据集格式说明 …

ESLlint重大更新后,使用旧版ESLint搭配Prettier的配置方式

概要 就在前几天&#xff0c;ESLint迎来了一次重大更新&#xff0c;9.0.0版本&#xff0c;根据官方文档介绍&#xff0c;使用新版的先决条件是Node.js版本必须是18.18.0、20.9.0&#xff0c;或者是>21.1.0的版本&#xff0c;新版ESLint将不再直接支持以下旧版配置(非扁平化…

Modbus转Profinet网关连接LED大屏与PLC通讯

Modbus转Profinet网关(XD-MDPN100)的主要功能是实现Modbus协议和Profinet协议之间的转换和通信。Modbus转Profinet网关集成了Modbus和Profinet两种协议,支持Modbus RTU主站/从站,并可以与RS485接口的设备,如变频器、智能高低压电器、电量测量装置等进行连接。通过Modbus转…

【Go语言】接口类型(一)接口类型与接口的值

本文是介绍golang接口类型的第一篇&#xff0c;主要介绍接口类型与接口类型的值的相关概念。 1. 静态类型、动态类型、动态值 所谓的静态类型&#xff08;即 static type&#xff09;&#xff0c;就是变量声明的时候的类型。 var age int // int 是静态类型 var name strin…

2024年最好用的10款ER图神器!

分享10款ER图工具,详细分析他们的功能特点、价格和适用场景,可以根据你的需求进行选择。ER图(Entity-Relationship Diagram)是数据库设计中常用的一种模型,用于描述实体之间的关系。这种图形化的表示方法旨在帮助人们理解和设计数据库结构,它们在数据库开发和设计中非常有…

【Network Automation系列】-- 第二章

继续上文,【Network Automation系列】-- 第一章 在第1章,对TCP/IP协议套件和Python的回顾中,我们研究了网络通信协议背后的理论和规范。 我们还快速浏览了一下Python语言。在本章中,我们将开始深入研究使用Python对网络设备的管理。 特别是,我们将研究使用Python以编程方式…

初中中考阅读理解难题一网打尽!句子结构深度解析+答案揭秘,助你轻松冲刺高分!-012

PDF格式公众号回复关键字:ZKYDT012原文1 Richard found the bird in the forest, didn’t he? 解析 1 Richard ,found 发现了, the bird 这只鸟, in the forest 在森林里, didn’t he? 不是吗 理查德在森林里发现了这只鸟,不是吗? 2 He saw a strange bird in a bush. 他…

【51单片机项目】基于51单片机自制多功能小键盘/模拟USB键盘【附源码】(STC89C52RC+CH9328)

目录 一、效果展示 二、创作灵感 三、硬件电路 注意事项 工作原理 四、源码 main.c 五、附录 CH9328工作原理 CH9328的模式选择 ​编辑 全键盘键码值表 参考链接 一、效果展示 该小键盘具有三种功能&#xff1a; 1、自动输入开机密码 2、每隔一段时间自动按下ct…

【Qt 专栏】DateTime日期时间组件

本文转载自:https://cloud.tencent.com.cn/developer/article/2371799 本章将重点介绍QDateTime日期与时间组件的常用方法及灵活运用。在Qt中,日期和时间的处理通常使用 QDateTime 类。QDateTime 是一个用于表示日期和时间的类,而与之相关的组件还包括 QDate 、 QTime以及QD…

【threejs教程7】threejs聚光灯、摄影机灯和汽车运动效果

【图片完整效果代码位于文章末】 在上一篇文章中我们实现了汽车模型的加载&#xff0c;这篇文章主要讲如何让汽车看起来像在运动。同时列出聚光灯和摄像机灯光的加载方法。 查看上一篇&#x1f449;【threejs教程6】threejs加载glb模型文件&#xff08;小米su7&#xff09;&…

七段数码管

import turtle, datetime def drawGap(): # 绘制数码管间隔 turtle.penup() turtle.fd(5) def drawLine(draw): # 绘制单段数码管 drawGap() turtle.pendown() if draw else turtle.penup() turtle.fd(40) drawGap() turtle.right(90) def drawDigit(d): # 根据数字绘制七段…

微软如何打造数字零售力航母系列科普02 --- 微软低代码应用平台加速企业创新 - 解放企业数字零售力

微软低代码应用平台推动企业创新- 解放企业数字零售力 微软在2023年GARTNER发布的魔力象限图中处于头部领先&#xff08;leader&#xff09;地位。 其LCAP产品是Microsoft Power Apps&#xff0c;扩展了AI Builder、Dataverse、Power Automate和Power Pages&#xff0c;这些都包…

git 命令怎么回退到指定的某个提交 commit hash 并推送远程分支?

问题 如下图&#xff0c;我要回退到 【002】Babel 的编译流程 这一次提交 解决 1、先执行下面命令&#xff0c;输出日志&#xff0c;主要就是拿到提交 commit 的 hash&#xff0c;上图红框即可 git log或者 vscode 里面直接右击&#xff0c;copy sha 2、执行下面命令回退 g…

条件格式实例

import pandas as pd import numpy as np import datetime todaystr(datetime.date.today())filepath/Users/kangyongqing/Documents/kangyq/202311/班均及合班储备/z拆班校验/ file102查询结果.csv file2工具-国家对应大洲表格_副本.xlsxdf1pd.read_csv(filepathfile1,dtypeob…

golang学习笔记(net/http库基本使用)

关于net/http库 我们先看看标准库net/http如何处理一个请求。 import ("fmt""log""net/http" )var count 0func main() {http.HandleFunc("/", handler)http.HandleFunc("/count", counter)log.Fatal(http.ListenAndServ…

OpenHarmony音视频—opus

简介 Opus是一种用于在互联网上进行交互式语音和音频传输的编解码器。它可以从低比特率窄带语音扩展到非常高的高品质立体声音乐。 下载安装 直接在OpenHarmony-SIG仓中搜索opus并下载。 使用说明 以OpenHarmony 3.1 Beta的rk3568版本为例 将下载的opus库代码存在以下路径&a…