一、使用 Composer 初始化项目

在项目根目录下使用下面的命令进行初始化:

$ composer init

这个命令会询问几个问题,以便在项目根目录下自动生成一个 composer.json 文件。关于 composer.json 文件的更多字段可以查看这篇文档来了解。

  • Package name (<vendor>/<name>):Composer 包的名称,也就是以后使用 composer require 命令时填写的包名。通常的格式是 创建者名/项目名称,例如:practicemp/simple-mysql
  • Description:对这个项目的简单描述。
  • Author [practicemp <example@mail.com>, n to skip]:作者名 name 及其邮箱地址 email。还可以直接修改后面生成的 composer.json 文件,添加主页地址 homepage 和 在项目中的角色 role
  • Minimum Stability:最低稳定级别。指的是,如果项目依赖其它包,而依赖的包低于设置的这个最低稳定级别,就会被忽略。默认是 stable,另外还有 devalphabetaRC
  • Package Type:包的类型,默认为库 library。此外还有项目 project、空包metapackage、Composer 插件 composer-plugin
  • License:许可证类型,阮一峰的这篇文章对其有通俗易懂的解释。
  • require:必须依赖的软件包,除非这些依赖被满足,否则不会完成安装。如果没有输入 no
  • require-dev:这个列表是为开发或测试等目的,额外列出的依赖。如果没有输入 no。“root 包”的 require-dev 默认是会被安装的。然而 installupdate 支持使用 --no-dev 参数来跳过 require-dev 字段中列出的包。

然后会将上面所有输入的信息以 JSON 格式列出让你确认。输入 yes 表示确认无误后便会据此生成 composer.json 文件。最后还会询问是否要将 vendor 文件夹添加到 .gitignore 文件中。

接着打开生成的 composer.json 文件,补充非常重要的 autoload 字段。用来定义项目命名空间到路径的映射。例如:

{
    "autoload": {
        "psr-4": {
            "Monolog\\": "src/",
            "Vendor\\Namespace\\": ""
        }
    }
}

同时别忘了项目文件中也要定义命名空间。如果项目中使用了 PHP 自带的类,如 mysqli,需要在类名前加反斜扛 \mysqli,表示根命名空间。

二、将项目的标签推送到 GitHub

首先确认项目是否还有为提交的修改:

$ git status

如果有就先提交:

$ git add .
$ git commit -m "附注"

这时就可以给项目打标签了:

$ # 轻量级标签
$ git tag v1.0.0
$ # 或者含附注的标签
$ git tag -a v1.0.0 -m "附注"

如果要打含附注的标签而不用 -m 选项。会出现一个 VI 文本编辑界面,可以编辑一段较长的『描述』。如果使用轻量级标签,则附注为最近一次 commit 的附注。

接着将项目分支和标签推送到 GitHub:

$ git push -u origin master
$ git push origin v1.0.0

这两个命令不分先后,相互独立。上面的命令是将分支变化推送到 GitHub。下面的命令是将项目标签推送到 GitHub。两个命令互不影响。如果先推送标签,不推送分支的话,可以看到 releases 会增加一个标签,但 GitHub 上的文件并没有更新,。

可以用下面的命令管理标签:

$ # 查看项目所有标签
$ git tag
$ # 查看指定标签
$ git show v1.0.0
$ # 删除指定标签
$ git tag -d v1.0.0
$ # 删除远程库指定标签
$ git push roigin --delete tag v1.0.0

三、在 Packagist 上发布项目

登录 Packagist,点开右上角用户名左边的 Submit 标签页。输入 GitHub 上的项目地址(URL)。点击 Check 按钮,Packagist 会检查项目是否符合要求。如果符合要求,会出现一个 Summit 按钮。点击该按钮,项目就发布成功了!

四、设置 Packagist 自动更新

此时只是将项目的现有版本发布,如果想实现 Packagist 自动检测 GitHub 上的版本更新,还要接着设置。

首先获取 Packagist 的 API Token,打开个人信息页面上的 Profile 标签页。点击绿色的按钮 Your API Token,右边就会出现 API Token。

然后打开 GitHub 的项目页面,依次点击 Settings 标签页 -> 左边栏 Webhooks -> 右上角 Add webhook 按钮。然后填写下面 4 项:

  • Payload URLhttps://packagist.org/api/github?username=用户名,这里的用户名是你在 Packagist 上注册的用户名。
  • Content type:选择 application/json
  • Secret:粘贴前面在 Packagist 上获取的 API Token。
  • Which events would you like to trigger this webhook?:选择 Just the push event.

点击最下面的 Add webhook 提交。此时,每次 GitHub 上项目发布了新版本,Packagist 就会自动更新。

至此,你的 Composer 包的发布已经完成。

五、使用

如果 Composer 包是一个库:

$ # 加载库
$ composer require practicemp/simple-mysql
$ # 更新版本
$ composer update practicemp/simple-mysql

如果要在脚本中使用该库,只需要在脚本中引入 composer 的 autoload.php 文件。就可以使用包中命名空间了:

<?php
require_once __DIR__.'/vendor/autoload.php';
use PracticeMP\DB\SimpleMysql;

$sm = SimpleMysql::getInstance('0.0.0.0', 'root', 'mysecret', 'test', 3306, 'utf8');

六、参考文章

Git 基础 - 打标签

composer.json 架构

How to update packages?

git中tag与release的创建以及两者的区别

(完)