创建属于自己的第一个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 自动拉取更新

使用

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

3 条评论

发表评论

*