简介
Composer 包是 PHP 源码文件的集合,使用 Composer 包可以方便的使用他人已经开发好的实现特定功能的 PHP 源码,避免重复造轮子。并且,我们也可以创建自己的 Composer 包,给他人或自己在项目中提供便利,在实际的使用过程中,也更加容易持续完善 Composer 包。
注意:根据 Composer 官方文档的介绍,Composer 不是一个包管理器(not a package manager),而只是用做依赖管理(dependency manager)。
初始化扩展包
先创建一个空目录,再在空目录里执行 Composer 自带的 init
命令,自动生成 Composer 的配置文件(composer.json)。
$ mkdir composer_test
$ cd composer_test
$ composer init
请注意:Minimum Stability
(官方说明) 要输入 dev
,表明我们的扩展包最小稳定版的开发版。否则 Composer 的默认 Minimum Stability
是 stable
,扩展包需要打上版本号才能被 Composer 认为是稳定版(stable),前期开发调试时简单点处理,设置为 dev
,这样引入开发中的 Composer 扩展包时不需要去管什么版本号,等开发调试过了再说。
type
字段的官方说明。
version
字段的官方说明。
包的环境要求和自动加载规范
环境要求通过 composer.json 里的 require
字段来限制。
自动加载规范通过 autoload
字段来定义。
现在假定需要 PHP 的版本大于等于 7.0.0,并且当前包的 src 目录下的文件以 YxzComposerTest 命令空间来加载,在 composer.json 中增加以下代码:
"require": {
"php": ">=7.0"
},
"autoload": {
"psr-4": {
"Yxz\ComposerTest\": "src"
}
}
如果需要引入其他的非 PSR-4 规范的源码文件,可能会需要用到 autoload
下的 file
(官方说明) 字段,每一次请求 PHP 时都是包含这些文件。
例如要包含钉钉 SDK 的代码,可以在 composer.json 中增加以下代码:
"autoload": {
"files": [
"lib/taobao-sdk-PHP/TopSdk.php"
]
}
扩展包里创建类文件
src
目录下新建 Calc.php 文件,内容如下:
<?php
namespace YxzComposerTest;
class Calc
{
// 计算平方值
public function square($val)
{
return $val * $val;
}
}
在项目中引入本地的扩展包
项目要引入本地目录的扩展包,先要在 composer.json 文件中加入以下内容:
"repositories": [
{
"type": "path",
"url": "/home/yxz/samba_share/project/composer_test"
}
]
然后在项目目录下执行 Composer 命令:
composer require yxz/composer_test:@dev
或者
composer require yxz/composer_test:dev-master
注意:上面命令中的 yxz/composer_test
就是 Composer 扩展包里 composer.json 的 name
字段值。@dev
或 dev-master
表示引入的扩展包是主分支的最新版,当还未将扩展包提交到 Github 仓库或者发布到 Packagist 上时,一般这样引入扩展包。
Composer 会输出下面内容,表示已与本地的扩展包目录建立了超链接(当直接修改扩展包目录里的源码时,项目里可以直接看到效果):
测试项目中引入的本地扩展包
新建测试 PHP 文件:
<?php
$calc = new YxzComposerTestCalc();
echo $calc->square('12');
终端或者浏览器访问这个 PHP 文件,会看见输出 144
:
谢谢阅读。
参考文章:
学习开发自己的 Composer 包,并使用 GitHub 实时更新到 Packagist | Laravel China 社区
Composer 包开发居然这么简单 - 掘金
PHP回顾之创建自己的Composer包 - 掘金