Can
Be Better

私有 composer 包创建

引出

在实际使用中经常会有这样的需求, 多个PHP项目中用到了同一套代码, 如果靠复制粘贴的话, 不光代码不好维护, 而且同步起来也麻烦.

但是可以用 PHP 的包管理呀, composer. 那新的问题来了, 我们自己私人的包, 并不想开源出去, 怎么办呢?

来了, 利用gitlab github gitee 等管理自己的私有 composer 包. 这三个都是 git 管理工具, 使用起来都是一模一样的流程, 我就以访问速度比较快的gitee来举例.

发布 composer 包

首先创建一个项目, 然后在src路径下放自己的源代码, 当然其他路径或者跟路径都可以. 然后在项目的跟路径下新建composer.json文件(请自行将下面的注释去掉):

{
   // 包的名字, 在之后其他项目引入`require`的时候,用的就是这个
    "name": "hujingnb/composer_demo",
   // 包的描述信息
    "description": "composer test",
   // 包类型, 这里指定为 库
    "type": "library",
   // 作者信息, 可以有多个, 没有也行
    "authors": [
        {
            "name": "hujingnb",
            "email": "[email protected]"
        }
    ],
   // 在这里如果用到了其他的包, 也可以引进来
    "require": {},
   // 设置自动加载机制
    "autoload": {
        "psr-4": {
            "hujingnb\\": "src/"
        }
    }
}

当然, 如果嫌麻烦, 可以在跟路径下直接运行composer init 跟着它的提示将信息填进去就行了.

然后我在src路径下创建了一个测试文件MyUtil.php:

<?php
/**
 * 测试, 随便写两个
 * @author hujing
 * @date 2020/6/18
 */
// 这里的命名空间要和 composer 中定义的自动加载机制相对应
namespace hujingnb;

class MyUtil{
    public static function echoTest(){
        echo 'test';
    }
}

当然, 因为要提交git嘛, gitignore 当然是少不了的.

现在我的项目结构如下:

image-20200618211736985

这个时候先别急着提交, 可以先测试一下. 直接在跟路径下执行composer install . 执行之后, 你就会发现跟路径多了一个 vendor 包, 写个 test 测试一下. 现在的结构如下:

image-20200618212403956

Test.php 文件中简单调用了一下测试的方法(当然, 在真实的项目中也可以这样搞, 毕竟你的包写完也是需要测试的嘛):

<?php

require_once __DIR__.'/../vendor/autoload.php';

\hujingnb\MyUtil::echoTest();
echo PHP_EOL;

运行一下, 一切正常, 把项目提交上去, 因为是私人用嘛, 提一个私有项目就好啦. 之后这个包作为一个单独的项目进行维护就好了.

在项目中引入私有包

另外建一个项目, 用来测试引入私有包. composer.json 如下(请自行删除注释):

{
    "name": "root/composer_require_demo",
    "authors": [
        {
            "name": "hujingnb",
            "email": "[email protected]"
        }
    ],
    "require": {
       // 指定引入的包名称, 这个名称就是上面包的 "name"属性, 后边指定引入 master 分之
        "hujingnb/composer_demo": "dev-master"
    },
    "repositories": [
       // 将包源换成阿里云的, 速度快一些
        {
            "type": "composer",
            "url": "https://mirrors.aliyun.com/composer/"
        },
       // 禁用官方请求, 否则慢的要死, 甚至超时
        {
            "packagist": false
        },
       // 将自己的项目 git 连接放进来
        {
            "type": "git",
            "url": "https://gitee.com/hujingnb/composer_demo.git"
        }
    ],
    "config": {
       // 开启 http 请求, 当然, 如果上面的 git 使用的是 ssh 的话, 这里可以不加. 不过需要配置 ssh, 请自行谷歌
        "secure-http": false
    }
}

git 链接哪里有, 这里:

image-20200618213127407

好了, 执行 composer install 命令安装吧. 因为使用了 http 请求, 中间会要求输入用户名和密码, 直接输入就行. 安装之后就是这样了:

image-20200618213249687

看vendor 的结构, 它其实就是直接将上面的项目 clone 进来了.

现在试验一下更新功能, 将第一个项目进行更新点并提交, 本项目中执行composer update 或者 composer update hujingnb/composer_demo 只更新这一个包. 查看后确实更到了最新, 嗯嗯没得问题.

好, 是不是很简单呀.


最后的最后, 有没有发现点什么? 第二个项目的composer.json文件和第一个项目基本没什么区别嘛, 而且在 require 的时候, 使用的是”name”属性, 在第二个项目中也有”name”, 那是不是意味着, 第二个项目也可以作为包被导入啊? 我试了一下, 确实可以. 所以, 每一个composer项目, 既引入了其他项目, 同时也可以被其他项目引入. 嗯嗯, 666.

以后就可以告别代码的复制粘贴, 将私有包通过git 管理工具统一管理啦.

原文地址:https://cloud.tencent.com/developer/article/1651320

不开启评论,如有问题疑问请发邮件。[email protected]最长的路 » 私有 composer 包创建