首页 > 生活服务 > 程序猿源

程序猿源

如何发布一个自己的Composer依赖包

管理员 8月前 217浏览

什么是 Composer

Composer 是 用 PHP 开发的用来管理项目依赖的工具,当你在项目中声明了依赖关系后,composer 可以自动帮你下载和安装这些依赖库,并实现自动加载代码。

Composer 工作原理

主要由三个部分组成:命令行工具、包仓库、代码库:

image
image

1. 命令行

命令行指的就是 composer 的各种命令。如:创建项目(create-project)、引入扩展包(require)、移除扩展包(remove)、清空缓存(clear-cache)等

2. 仓库

Packagist:官方仓库,也就是我们平常说的 Composer 源,它的作用是存储这些包的信息,版本,代码来源,依赖,作者,主页等信息。官网是 packagist.org, 你也可以将自己的包发布在上面,这样 Composer 工具就能搜索与安装你的包了 公有仓库:https://packagist.org私有仓库:https://packagist.comRepository:代码存储库仓库,Packagist 支持公开与私有仓库,通常是 GitHub 作为代码仓库,当然也可以是 Gitee

3. 自动加载

只需要执行 composer 命令拉取扩展包,即可实现自动加载代码,包依赖管理和使用自动加载,PSR-0 和 PSR-4 自动加载规范。

composer 制作步骤

1. 创建代码仓库

在自己的 github 创建一个公共仓库,这里仓库名为 hello,创建好后克隆代码到自己本机电脑

git clone git@github.com:cbw7172002/Composer_hello.git

命令提示符截图

命令提示符截图

2.初始化 composer.json

命令提示符截图
命令提示符截图

项目目录结构

项目目录结构
项目目录结构
  • src/ 存放源代码文件

  • vendor/ 存放第三方依赖

  • composer.json 定义项目的元数据和依赖信息

  • README.md 项目的说明文档

  • 其他必要的文件和目录

3.实现包功能

这里实现一个简单的加密工具类 Encryption

<?php
declare(strict_types=1);

namespace Xifan\ComposerHello;

class Encryption {
    public const AES_128_ECB = 'AES-128-ECB';

    /**
     * @desc 加密
     * @param string $data 加密的数据
     * @param string $key 密钥,必须是16、24或32个字符长度
     * @param string $algo 加密方式
     * @param string $iv 初始向量(IV)
     * @return string
     * @author cbw7172002
     */
    public static function encrypt(string $data, string $key, string $algo = self::AES_128_ECB, string $iv = ''): string {
        $encryptedBytes = openssl_encrypt($data, $algo, $key, OPENSSL_RAW_DATA);
        return base64_encode($encryptedBytes);
    }

    /**
     * @desc 解密
     * @param string $data
     * @param string $key 密钥,必须是16、24或32个字符长度
     * @param string $algo 加密方式
     * @param string $iv 初始向量(IV)
     * @return false|string
     * @author cbw7172002
     */
    public static function decrypt(string $data, string $key, string $algo = self::AES_128_ECB, string $iv = '') {
        return openssl_decrypt(base64_decode($data), $algo, $key, OPENSSL_RAW_DATA);
    }
}

4.编写单元测试用例

PHPUnit 是一个轻量级的 PHP 测试框架,单元测试是几个现代敏捷开发方法的基础,使得 PHPUnit 成为许多大型 PHP 项目的关键工具。

全局安装 PHP 测试框架包 phpunit/phpunit

composer global require--dev phpunit/phpunit

命令提示符截图
命令提示符截图
使用示例

EncryptionTest.php 用例

<?php
/**
* @desc EncryptionTest
* @author cbw7172002
* @date 2024/8/12 14:27
*/

declare(strict_types=1);

class EncryptionTest extends \PHPUnit\Framework\TestCase
{
   public function test()
   {
       $data = '开源技术小栈';
       $key = '53vYPpTJIR1aYFiFh0PppZzF';

       /**
        * 加密
        */
       $encrypt = \Xifan\ComposerHello\Encryption::encrypt($data, $key);
       self::assertIsString($encrypt);

       /**
        * 解密
        */
       $decrypt = \Xifan\ComposerHello\Encryption::decrypt($encrypt, $key);
       // 判断解密明文是否和预期的相等
       self::assertEquals($decrypt, $data);
   }
}

运行这个单元测试,在命令行下输入代码

phpunit --bootstrap vendor/autoload.php tests/EncryptionTest.php

命令提示符截图
命令提示符截图

结果中点号.代表一个用例通过(即 assert 系列函数都通过)

5.提交代码到 GitHub

git commit -m "Your commit message"

git push --all

命令提示符截图
命令提示符截图

6.提交至 Packagist

Packagist 为 composer 默认获取包元数据信息的地址,从 Packagist 获取到元数据信息后,再从 GitHub 上拉取代码。因此,当把你开发的包上传至 GitHub 后还需要将其在 Packagist 注册。

一旦你的包发布到 Packagist 上,其他人就可以通过 Composer 安装你的包,并在他们的项目中使用你的代码。

提交至 Packagist 三个步骤

  • 注册帐号(有的话直接进行下一步)

  • https://packagist.org/packages/submit 提交开发包

    image
    image
  • 提交成功

    image
    image

使用自己的 composer 包

一旦提交的包在 Packagist 发布了,则可以通过 composer 直接安装使用

composer require xifan/composer_hello dev-main #由于没有发布正式包,这里拉取包先要指定 dev-main 分支

如果要发布一个正式版本,需要在自己 github 上的依赖包打标签 tag

// 打标签$ git tag v0.1// 标签推送远程仓库$ git push origin v0.1

这时候再去拉取默认版本,就是刚才打标签的 v0.1 版本了

小结

以上是一个简单的构建自己的 Composer 依赖包的步骤,通过 composer 来管理 PHP 的依赖,通过编写 composer package 去扩展自己的类库,通过引入其他的类库来填充自己的功能,就不用重复造轮子了。当然还有更多的细节和高级用法可以根据具体情况进行调整。希望对你有所帮助!


版权声明:本文为原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
关注微信公众号:"cq_xifan";

评论

收藏

评论列表

  • 这篇文章还没有收到评论,赶紧来抢沙发吧~

Powered By 重庆饭哥 © 2014-2022 教学资源分享站 渝ICP备20005643号-1

相信有一天,理想主义终将所向披靡.

Design by © 2021 XIFAN. Powered by 重庆饭哥

站点声明: 本站转载作品版权归原作者及来源网站所有,原创内容作品版权归作者所有,任何内容转载、商业用途等均须联系原作者并注明来源。

友情链接: 官方网站 饭哥在线工具 饭哥导航 在线运行 博客交流社区 重庆艺术工程职业学院