专栏首页沈唁志创建属于自己的第一个Composer/Packagist包

创建属于自己的第一个Composer/Packagist包

Composer 是 PHP 的一个依赖管理工具,Composer 不是一个包管理器,它涉及 “packages” 和 “libraries”,但它在每个项目的基础上进行管理,在你项目的某个目录中(例如vendor)进行安装。默认情况下它不会在全局安装任何东西,因此,仅仅是一个依赖管理

然后今天博主要介绍一下如何通过Composer和Packagist向PHP社区贡献代码包

首先,如果你是一个PHP开发者但是还不知道什么是Composer,请先参考了一下这篇文章Composer – PHP的春天依赖管理的新时代,或者这一篇简介

使用Composer

Composer是PHP的一个包依赖管理工具,你可以使用第三方库也可以自行开发,现在我要告诉你如何创建一个Composer包并且发送到Packagist(其他开发者可以通过它在他们项目中使用这些发布到Packagist上的包)

创建包

我们可以创建一个新项目来使用Composer。我建一个格式化输出数组的类,目前大多数框架都内置了快速打印的方法,这边仅仅为了演示如何创建包

文件结构

先创建功能文件

if (!function_exists('p')) {
    function p($data) {
        $str = '<pre style="display: block;padding: 9.5px;margin: 44px 0 0 0;font-size: 13px;line-height: 1.42857;color: #333;word-break: break-all;word-wrap: break-word;background-color: #F5F5F5;border: 1px solid #CCC;border-radius: 4px;">';
        if (is_bool($data)) {
            $show_data = $data ? 'true' : 'false';
        } elseif (is_null($data)) {
            $show_data = 'null';
        } else {
            $show_data = print_r($data, true);
        }
        $str .= $show_data;
        $str .= '</pre>';
        echo $str;
    }
}

我们可以把所有的文件都放在根目录下,但是我特别推荐新建另一个文件夹 “src” 以更容易理解和维护你的代码结构

开始Composer

现在要在项目的根目录里创建一个composer.json的文件,我们可以手动创建,也可以在根目录里通过composer init命令来根据提示创建

$ composer init
Welcome to the Composer config generator
This command will guide you through creating your composer.json config.
Package name (<vendor>/<name>) [asus/dump-p]: sy-records/dump-p
Description []: an example of composer package.
Author [shenyan <52o@qq52o.cn>, n to skip]:
Minimum Stability []: dev
Package Type (e.g. library, project, metapackage, composer-plugin) []:
License []: MIT
Define your dependencies.
Would you like to define your dependencies (require) interactively [yes]?
Search for a package:
Would you like to define your dev dependencies (require-dev) interactively [yes]?
Search for a package:

{
    "name": "sy-records/dump-p",
    "description": "an example of composer package.",
    "license": "MIT",
    "authors": [
        {
            "name": "shenyan",
            "email": "52o@qq52o.cn"
        }
    ],
    "minimum-stability": "dev",
    "require": {}
}

Do you confirm generation [yes]?

根目录下就生成了composer.json文件

添加自动加载

然后我们可以手动编辑生成的composer.json文件,这里大概说一下这个文件

{
    "name": "sy-records/dump-p",
    "description": "an example of composer package.",
    "license": "MIT",
    "authors": [
        {
            "name": "shenyan",
            "email": "52o@qq52o.cn"
        }
    ],
    "minimum-stability": "dev",
    "require": {
         "php": ">=5.3.0"
        },
    "autoload": {
        "files": [
            "dump-p.php"
        ]
//        "psr-4": {
//            "Sy\\": "src/"
//        }
    }
}

name就是包名称,后期在Packagist中搜索使用的,description包的描述,license协议,authors作者信息,minimum-stability包的状态,开发版、稳定版等

然后我们添加对于PHP的版本要求和自动加载

如果是单文件的话,我们可以使用files直接加载,文件多的话,使用PSR-4自动加载,以上的是使用Sy命名空间,加载src目录下的所有文件

进行测试

测试的话,在项目根目录执行:composer install,新建一个测试文件test.php,引入/vendor/autoload.php,打印一个数组,如果能够使用我们定义的方法p的话,就证明成功了

发布到Packagist.org

在发布到Packagist之前,我们需要在Github创建仓库来存储我们的代码才能提交到Packagist,最好是发布正式版本,进入我们仓库的Github主页,找到导航上“releases”,点击进去创建一个版本,填写好信息之后就可以发布版本了,或者在push到Github的时候带上tag标签推送

git tag v1.0 -a  
git push --tags

提交到Packagist具体步骤如下:

  1. 首先要在Packagist上注册账号并登录
  2. 点击顶部导航条中的Summit按钮
  3. 在输入框中输入github上的仓库地址,如:https://github.com/sy-records/dump-p.git
  4. 然后点击Check按钮 Packagist会去检测此仓库地址的代码是否符合Composer的Package包的要求
  5. 检测正常的话,会出现Submit按钮,再点击一下Submit按钮,我们的包就提交到Packagist上了
  6. 以后更新代码可以先从Packagist获取token然后去Github配置下对应的GitHub Service Hook实现代码提交后Packagist自动拉取更新
  7. GitHub Service Hook服务已被弃用,我们可以使用Webhooks来实现代码提交后Packagist自动拉取更新

使用

怎么使用就不说了,打包好了,不会用的话你是在逗我吗? ?

沈唁志|一个PHPer的成长之路! 原创文章采用CC BY-NC-SA 4.0协议进行许可,转载请注明:转载自:创建属于自己的第一个Composer/Packagist包

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【网摘】身在腾讯:浪潮之巅的惶惑与自救

    沈唁
  • 点击Docker Quickstart Terminal出现Windows正在查找bash.exe的解决方法

    启动Docker的话需要双击桌面的Docker Quickstart Terminal的快捷方式,但是会出现弹窗

    沈唁
  • Composer进阶使用之版本约束表达式的使用

    例如我们想要下载5.1版本的ThinkPHP包,我们可以通过composer.json文件:

    沈唁
  • 接口测试基础之入门篇(待续) 原

    晓歌
  • YOLOv3目标检测有了TensorFlow实现,可用自己的数据来训练

    现在,有位热心公益的程序猿 (Yunyang1994) ,为它做了纯TensorFlow代码实现。

    量子位
  • python人工智能:完整的图片识别(非图片验证码),以及模型的使用

    这个可以说是一个绝对的福利中的福利。一整套的AI图片识别以及模型的使用。 一直都在说人工智能,图像识别,又有几个人会呢,网上文章成山,前一段时间因工作需要,我一...

    Python疯子
  • python人工智能:完整的图片识别(非图片验证码),以及模型的使用

    这个可以说是一个绝对的福利中的福利。一整套的AI图片识别以及模型的使用。 一直都在说人工智能,图像识别,又有几个人会呢,网上文章成山,前一段时间因工作需要,我...

    Python疯子
  • Spring扩展点之BeanPostProcessor

    BeanPostProcessor接口是Spring中一个非常重要的接口,它的接口定义如下

    Java学习录
  • linux实用的日志分析脚本

    218.19.140.242 – - [10/Dec/2010:09:31:17 +0800] “GET /query/trendxml/district/to...

    流柯
  • 网址推荐

    版权声明:本文为博主原创文章,欢迎转载。 https://blog.csdn.net/che...

    程裕强

扫码关注云+社区

领取腾讯云代金券