composer工具帮我们很好地管理了PHP依赖包的问题。但是,作为一名PHPer,我们总不能永远只使用别人的开发包。我们骄傲是程序员必须自己动手开发一个包给别人用或自用。
以下我将以github结合composer工具来进行示例讲解。
一、创建一个github项目
首先,你得有一个github账号。然后,创建一个github 项目。
1)登录github。点击顶部导航栏的“+”,选择“New repository”。跳转到创建页页。
2)Repository name 我填写的是”utils”。可以填写你想要的名字。Description 是可选的。这是对这个项目的描述。接着下面的选项是让我们填写该项目是“public”还是”private”。选择”public”。接着“Initialize this repository with a README”建议勾选,给我们创建初始化一个项目文档首页。其他选项保持默认即可。根据提示选择即可。
- public:所有人都能访问您创建的项目。这也是github推荐的方式。免费。
- private:收费。只有指定的人才能访问这个项目。
- 3)点击“Create Repository”按钮,即可创建成功。
其次,我们要将这个github项目clone到本地。
1)在本地电脑创建一个目录localgit(名字随意)且保证系统中已经安装了git命令。
2)已创建的github项目右下角有一个”HTTPS clone URL”,点击那里的复制按钮把 url 地址复制出来。我的是:
- 3)在localgit父目录下。执行如下命令:
1 | git clone https://github.com/winerQin/utils.git localgit |
此命令会输出如下内容,代表执行成功:
1 | Cloning into 'utils'... |
二、创建composer.json
用过composer命令安装第三方开发包的人一定对composer.json不陌生。composer.json文件定义了包名、包的描述、作者、授权协议等信息。总之,一个项目要调用这个开发包,通过composer.json可以知道该怎样去加载文件。
因为,我们在本地已经有了一个github项目localgit。进入这个目录。使用composer命令智能化生成composer.json。
1 | composer init |
此时,会提示我们输入包名:
1 | Package name (<vendor>/<name>) [root/localgit]: |
输入:winerqin/localgit 并回车确认。注意:不能用大写字母和特殊字符。
因为,我们使用的是github。那么,推荐vendor为小写的用户名。name为仓库名称。
回车之后会提示输入包描述:
1 | Description []: |
这个你自己看着办。我比较懒。直接回车。
这个时候,会提示你输入作者和邮箱。默认是你初始安装git命令时配置的作者和邮箱。
1 | Author [winerQin <753814253@qq.com>]: |
因为,我的就是这个,所以,我直接就回车了。接着会填写最低稳定版本:
1 | Minimum Stability []: |
我直接填写了dev。如果你乱填写,则会提示如下:
1 | Invalid minimum stability "sdfsd". Must be empty or one of: stable, RC, beta, alpha, dev |
接着:
1 | License []: |
直接回车。
接着:
1 | Would you like to define your dependencies (require) interactively [yes]? |
输入No。
接着:
1 | Would you like to define your dev dependencies (require-dev) interactively [yes]? |
输入No。
接着后面都输入Yes即可。其实,根据英文提示,都知道要干嘛了。
此时,在localgit目录下会生成一个composer.json文件。内容如下:
1 | { |
其实,这个文件完全可以手工创建,按照这个格式。
三、创建项目内容
创建项目内容很简单,按照既定目录结构去创建目录和文件即可。然后,再到composer.json里面修改一下让其知道即可。
一般情况下一个完整的开发包结构如下:
– src 源码目录。这个名称按照所有程序员的约定不会更改名称。必不可少的。虽然,可以改为其他名称。但是不推荐。
– tests 单元测试目录。此目录不是必须的。一些超高规格的开发者会提供这个目录让便让其他程序员测试协作。
在 src 目录我们创建一个类:
1 | /** |
修改composer.json。修改后的内容如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19{
"name": "winerqin/utils",
"license": "MIT",
"authors": [
{
"name": "winerQin",
"email": "753814253@qq.com"
}
],
"minimum-stability": "dev",
"require": {
"php": ">=5.3.0"
},
"autoload": {
"psr-4": {
"winer\\": "src/",
}
}
}
关于 PSR-4规范,请看文档:我去
关于composer.json说明请看此博文:我去
到此,我们的开发包已经搞定。接下来我们测试测试这个包是否可用。
四、测试开发包
在localgit目录下,通过composer来安装测试。
1 | composer install |
输出以上信息说明安装成功咯。
在目录下会有一个vendor文件夹。
此时会在vendor/composer/autoload_psr4.php中生成命名空间和目录的映射关系,被包在一个数组中:
1 |
|
如果发布成packagist包然后进行安装的话,到时候这里就不是$baseDir了而是$vendorDir。稍后我们再发布到packagist。
在tests目录创建 ValidatorTest.php,内容如下:
1 |
|
通过php命令来运行:
1 | php ValidatorTest.php |
输入:1
是手机号码
五、发布到packagist
packagist指的是packagist.org。这个网站是composer默认下载开发包的资源引用网站。所以,我们得在此网站注册一个账号。然后添加我们开发包的github项目。
- 1)将本地代码提交到github。
在发布之前,我们要把localgit的代码提交到github上去。
1 | git add . |
此时,访问github的utils仓库,发现我们的刚刚提交的代码都已经安静地在里面了。
- 2)发布g到packagist
请确认已经登录。在packagist.org首页的右上角有一个”Submit Package”按钮。点击即可进入开发包提交的界面。在页面最下方有一个输入框,输入我们github的utils项目地址:
再点击”Check ->”,经过几秒钟的等待会显示验证成功,并显示出提交的按钮。点击提交即完成了开发包的提交了。
那么,接下来这个开发包就可以在任何支持composer的PHP框架中使用了。恭喜您!!!
- 3)让我们的github代码更新能让packagist.org自动更新
登录github。选择代码仓库。我的是utils。然后,右边选择”settings” -> “Webhooks & Services” -> “Add Service” -> 下拉列表中选择 “packagist” -> 根据提示填写packagist账号,以及packagist提供的token。域名填写:http://packagist.org。
就这样,以后更新就会自动更新packagist.org上了。是不是好开心?是的。
超级提示:我们可以模仿已有的第三方包进行开发。
关于git中文文档请看:我去