🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# **建立自己的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 ``` 另外,加载这个包`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`目录结果 ~~~ composer.json 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 │ └─... ~~~ ``` { "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` ``` <?php namespace Dash\tools\church; class TestClass1{ public function show(){ echo 'hello'; } } ``` `D:\phpstudy_pro\WWW\www.demo1.com\index.php` ``` <?php ini_set('display_errors', 1); error_reporting(E_ALL); include 'vendor/autoload.php'; $a= new \Dash\tools\church\TestClass1(); var_dump($a); ``` >[info]那么可不可以不上传到 让composer直接获取到github仓库的插件包呢? ~~~ "repositories": [ { "type": "vcs", "url": "https://github.com/user/project" } ] ~~~