Composer 从入门到写一个自己的 Composer 包/库

Composer 是什么

Composer 的中文是一个优美的名字 —— 作曲家,根据 X 度 X 科描述:Composer 是 PHP 5.3(我也不知道这儿是否应该有一个“及”)以上的一个依赖管理工具。简单来说我们可以把它看做 PHP 的“软件管家”。

安装、环境变量

怎么安装?…命令行找不到 composer?环境变量 PATH 及其作用请了解清楚。

正文

创建

随便找一个地方新建文件夹用以存放 Composer 包/库,就叫 FirstLib 吧,在该目录下执行以下命令:

composer init

接着 Composer 会提示你输入一些东西,我们来看看啊:

  • Package name (/):需要创建的包名,格式为 发布者/包名,举例 maxsky/first-lib【必须全小写,发布者名称不含空格,一般为 GitHub 用户名】。方括号中的内容为根据你当前文件夹名称默认生成,如果无需更改直接回车使用
  • Description:包描述
  • Author:作者信息,默认引用 Git 全局配置文件 .gitconfig 中的名称和邮箱(如果有),格式为 名称 <邮箱地址>,如:Max Sky
  • Minimum Stability:最小的稳定版本,建议设置为 dev
  • Package Type:包类型,可选的 4 种已在提示中,一般情况下我们填写 library
  • License:许可,常用的 MITApache-2.0,怎么选戳这儿:如何选择开源许可证? - 阮一峰的网络日志。实在不知道我们就用 MIT
  • Define your dependencies.:定义你即将开发的包所需要的依赖,你可以在这里搜索并添加,也可以在后续修改 composer.json 文件,这儿我们连续两次输入 no 跳过(第二次是开发版本依赖)
  • Do you confirm generation:确认生成命令行中显示的信息,回车后 composer.json 文件出现在文件夹中

命名空间

个人习惯,会在 Composer 包的根目录创建 src 文件夹和 tests 文件夹

将功能代码放置于 src 中,测试代码放置于 tests 中(如无需要可省略)

这儿需使用自动加载。我们编辑刚刚生成的 composer.json 文件,在最后方添加如下内容

"autoload": {
    "psr-4": {
        "MyLib\\Component\\": "src"
    }
}

强调 命名空间 必须\\ 结尾。同时 只有 在这儿设置了自动加载的命名空间后,项目中才能通过命名空间使用该包。

开发

在这个包中,你可以进行任意发挥编写你所需要的功能。编写到一个阶段后结合项目开始我们的测试。

实际项目引用及调试

假设我们的项目使用的 Laravel、Lumen 一类支持 Composer 的框架

我们首先编辑 项目根目录(是项目不是 FirstLib 包)的 composer.json 文件,在最下方添加如下内容:

"repositories": {
    "发布者名称": {          // 如:maxsky(GitHub 用户名)
        "type": "path",
        "url": "包绝对路径"  // Unix:/Users/xxx/Documents/GitHub/FirstLib
                           // Windows:E:\\MyComposerPackage\\FirstLib
    }
}

然后在项目根目录运行命令行:(注意这个名称和我们创建包时的 Package name 是相同的)

composer require 用户名/包名 # 如:composer require maxsky/first-lib

稍等片刻,会出现类似如下提示:

Using version dev-master for maxsky/first-lib
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
  - Installing maxsky/first-lib (dev-master): Symlinking from /Users/xxx/Documents/GitHub/FirstLib
Writing lock file
Generating optimized autoload files

此时我们戳开项目根目录的 vendor 文件夹,找到 你的名字,例如 vendor/maxsky
Composer 从入门到写一个自己的 Composer 包/库_第1张图片
你会发现文件夹图标上有箭头↗,因为 Composer 自动创建了链接过来,这样你修改绝对路径中的代码,这儿也会跟着变。非常方便调试。

但如果修改了 中的 composer.json 文件,我们则需要在 项目根目录 再次执行下方命令以实现更新。

composer require maxsky/first-lib

无需 removerequire

使用

一切 OK 后我们就可以在项目中通过命名空间的引入使用 里的各种东西了。

use MyLib\Component;

发布

首先将代码提交至 GitHub,然后创建账户并登录 Packagist

Submit 提交界面中输入 Composer 包的 GitHub 地址,根据提示创建即可

最后需要通过 WebHook 钩子进行代码提交、发布的自更新。

什么意思呢?就是每次提交版本 tag 的时候,让 Packagist 去拉取最新代码以更新版本。

对了,如果确定要发布一个稳定的版本,为当前提交添加一个 releasetag 标签即可,格式 v1.12.0

那么怎么配置钩子?

首先打开 GitHub 刚提交的仓库,在 Settings 中点击 Webhooks 并添加

  • Payload URL:填写 https://packagist.org/api/github
  • Content type:选择 application/json
  • Secret:填写在 https://packagist.org/profile 中的 API Token

其它保持默认,确保 Active 勾选,保存即可。

最最最后,回到你项目下的 composer.json 文件,删除 repositories 部分内容并重新 composer require 包就能从线上获取啦!

如果因为使用 Composer 镜像获取不到,请注意镜像会有同步 Packagist 的延迟,参考:阿里云 Composer 全量镜像

你可能感兴趣的:(Web,php,composer)