# **建立自己的composer包**
composer 包的平台:[packagist.org](https://packagist.org/),这里面包含了大量的优秀的安装包
**1、创建自己的github仓库**
点击 [New repository](https://github.com/new)创建自己的github仓库,命名为test
![](https://img.kancloud.cn/b2/e0/b2e0a81d23f4cf211196a99ddf07dddd_268x260.png)
**2、克隆项目**
git定位到D:\下键入:
```
git clone git@github.com:lichihua/test.git
```
克隆后:D:\目录下会生成D:\test目录
**3、创建 Composer 配置文件**
在项目根目录`D:\test`创建 Composer 配置文件 composer.json,可以使用命令`compser init`创建也可以手动创建,最终文件内容大体如下:
~~~
{
// "name": "一般有供应方名或者作者名/项目名", //github的用户名(个人或团体)+项目名
"name": "lichihua/test", //发布第三方包时,packagist包名与此名一致 composer require lichihua/test
"description": "该项目描述",
"authors": [
{
"name": "作者名"
}
],
"license": "MIT",
"require": {
"php": ">=5.4"
},
"autoload": {
"psr-0": {
//根命名空间最好是项目名或【供应方名或者作者名】/项目名 方便开发者记忆 不过项目名代下划线如think_test 这种可以改成 thinktest
"Lichihua\\Test\\": "src/" //use Lichihua\Test\...
}
}
}
~~~
**4、编写及测试文件**
定义好以后在composer.json同文件下的src下编写测试类,详情请参照`composer自动加载讲解`章节
>[danger]压缩源(src)文件,生成压缩包到(dest),dest一般和src配对出现
目录结构参照:
~~~
D:/
├─test 应用目录(www)
│ ├─composer.json composer 定义文件
│ ├─.gitignore
│ ├─README.md README 文件
│ ├─src 项目目录
│ │ ├─Lichihua 目录
│ │ │ ├─Test 目录
│ │ │ │ ├─User.php User类测试文件
│ │ │ │ ├─Tools.php Tools类测试文件
│ │ │ │ └─ ...
│ │ │ │
│ │ │ └─ ...
│ │ │
│ │ ├─Client.php 测试文件1
│ │ ├─Service.php 测试文件2
│ │ └─ ... 更多类文件
│ ├─index.php 入口文件测试编写的类
│ │
│ └─...
│
├─...
~~~
使用 composer install 或者 composer update 更新下数据 测试是否加载成功
**5、添加忽略文件**
然后编辑.gitignore文件,将lock文件放到忽略文件中,如下:
```
/vendor/
composer.lock
```
**6、上传到github**
具体参考git的文档
```
git add .
git reset HEAD . //回退 git add的内容
git commit -m "提交说明"
git push origin master
```
**7、提交到[packagist](https://packagist.org/packages/submit)这个网站上**
点加submit
Repository URL (Git/Svn/Hg)下的文本框里填写github的地址
`git@github.com:lichihua/test.git`,再点击check ,检测成功点击提交则成功
![](https://img.kancloud.cn/5c/4f/5c4f22d9d8958b1d2402cb9837754ce1_833x154.png)
![](https://img.kancloud.cn/ce/6e/ce6e8785c0743ae2a6aa81062161803c_1282x279.png)
设置代码更新,同时能让[packagist.org](http://packagist.org/)自动更新(默认是自动更新的)
如果未绑定,可以这样设置:"settings" -> “Webhooks” -> "Add webhook" ->
1. Payload URL填写:“[packagist.org/api/github”](https://packagist.org/api/github%E2%80%9D)
2. Content type填写:“application/json”
3. Secret填写:“packagist提供的token”
4. 其他的默认即可
5. 点击“Add webhook” 完成。
![](https://img.kancloud.cn/11/be/11beab3d270795bf300658fb044ccdb2_1304x515.png)
**8**
另外一个项目中,加载这个包`composer require lichihua/test ` 测试不能成功提示没有找到版本,这是因为没有打标签tag
没有打 tag 的要指定 dev,完整命令`composer require "lichihua/test @dev"`
git页面我们切换到test项目根目录,提交修改,打一个v0.1的tag,然后提交tag到远程github仓库
git push \ \ \ tagName
```
git tag -a v0.1 -m "第一个版本"
git push origin v0.1
```
github当前项目里点击release,发布一个版本
进入后在点击右侧的[Draft a new release](https://github.com/lichihua/test/releases/new))按钮
有三个文本框 分别是版本、版本说明标题、版本说明
填写好以后点击Publish release提交
参考[https://www.jianshu.com/p/280acb6b0b22](https://www.jianshu.com/p/280acb6b0b22)
![](https://img.kancloud.cn/49/05/49053f693033fa3fb98e8feb3fc84ac5_1039x434.png)
![](https://img.kancloud.cn/56/b6/56b688585e6863be93cfd565ee081ca7_977x594.png)
再次`composer require lichihua/test`目录结果
~~~
vender
├─composer
├─lichihua
│ ├─test 应用目录(www)
│ │ ├─composer.json composer 定义文件
│ │ ├─.gitignore
│ │ ├─README.md README 文件
│ │ ├─src 项目目录
│ │ │ ├─Lichihua 目录
│ │ │ │ ├─Test 目录
│ │ │ │ │ ├─User.php User类测试文件
│ │ │ │ │ ├─Tools.php Tools类测试文件
│ │ │ │ │ └─ ...
│ │ │ │ │
│ │ │ │ └─ ...
│ │ │ │
│ │ │ ├─Client.php 测试文件1
│ │ │ ├─Service.php 测试文件2
│ │ │ └─ ... 更多类文件
│ │ ├─index.php 入口文件测试编写的类
│ │ │
│ │ └─...
│ │
│ ├─test2
│ │
│ ├─...
│
├─autoload.php
│
└─...
composer.json
~~~
```
{
"require": {
"lichihua/test": "^0.2.0"
}
}
```
`D:\phpstudy_pro\WWW\wwwdemo1.com\vendor\lichihua\test\composer.json`
```
{
...
"autoload": {
"psr-4": {
"Dash\\tools\\":"src"
}
}
}
```
>psr-4的规则:"root命名空间\\":"起始路径",
root命名空间:Dash\\tools\\
起始路径:src
对应文件的路径:起始路径+ [额外路径] + 类文件(必须与类名一致)
即:src+church+TestClass1.php
使用时
use root命名空间[\额外路径]\类名
new \root命名空间[\额外路径]\类名()
`D:\phpstudy_pro\WWW\www.demo1.com\vendor\lichihua\test\src\church\TestClass1.php`
```
namespace Dash\tools\church;
class TestClass1{
public function show(){
echo 'hello';
}
}
```
`D:\phpstudy_pro\WWW\www.demo1.com\index.php`
```
ini_set('display_errors', 1);
error_reporting(E_ALL);
include 'vendor/autoload.php';
$a= new \Dash\tools\church\TestClass1();
var_dump($a);
```