IT技术研习社,专注互联网技术研究与分享,喜欢的朋友可以点击【关注】;把经验传递给有梦想的人;
创建自己的Composer
仓库(Repository)
仓库是软件开发中常见的概念,与源(sources)意义相近,主要指托管资源的场所。许多软件都有仓库的概念,例如yum、npm、Git,以及Composer。仓库以中心化的方式托管资源,为软件的正常工作提供保障。
Packagist 是Composer默认的中央仓库,PHP社区的绝大部分Composer包都托管在该网站上。Packagist提供公开的、免费的托管服务,任何人均可注册、自由发布包,无需审核。Packagist由Private Packagist提供托管和维护,两者的主要区别为:Packagist的官网是托管...,托管的代码无需开源,仓库服务器可位于内网,提供更快、更高效的包代码托管服务。
可以配置多个仓库,Composer会自动找出最适合项目的依赖包。搜索包的流程如下:首先检查当前项目是否配置额外仓库,有则优先在额外仓库中检索;无结果向上到全局配置中的额外仓库检索;未配置或搜索无结果的情况下,回退到默认的Packagist中央仓库检索。除非禁用了默认的仓库,Packagist中的包总会被检索到。因为这个原因,Composer推荐PHP开发人员将包托管在Packagist网站上,方便他人检索和引用。
1.首先,打开https://github.com/的官网,注册一个账号,之前我早就注册了账号,这里就不展开了,相信大家都会注册账号。
2.创建自己的github仓库,如图
接下来填写自己的仓库名,开始创建仓库
找到仓库地址复制,将仓库克隆到本地,我的是放到 e:/source,如果这一步,你克隆的是git开头的地址,你需要将你机器的ssh公钥,和github绑定上,否则你是无法克隆git开头的仓库地址的,这里注意下,我的早就绑定了,所以,这里可以克隆。你想克隆git开头的地址,你可以本地生成ssh-key,就会在你本地生成几个文件,把那个id_rsa.pub中的全部内容,放到github网站的SSH keys中即可,入口在设置setting里面,设置好,就可以克隆了
切换到abstarfish仓库下面,这就是你的根目录,这是里面只有一个readme.md文件,(只需要记住composer.json在包的哪个目录下面,一般那就是包的根目录了。)
现在我们还没有composer.json文件,可以根据composer文档生成并编辑它,当然composer贴心的为我们准备了命令行,composer init,根据提示填写
生成了composer.json文件,但是,还缺自动加载,我们在composer.json中加入自动加载的代码,图:
接下来,按照psr-4的配置在根目录下创建文件夹和文件,这里的文件夹和psr-4配置要一致,我创建了一个Tool类,写了一个静态Hello方法,用于包的第一个版本测试,如图
接下来,执行 composer install 包就装好了,如图
然后,根目录下就多了一个vender目录,它就是包的自动加载代码,vendor/composer/autoload_psr4.php中生成命名空间和目录的映射关系
接下来,我们在根目录下创建一个demo.php,测试一下,我的hello方法是否可以用,代码如图
出现hello world 说明我们的包可以用了,然后编辑.gitignore文件,将lock文件放到忽略文件中,如下图:
接下来,提交代码到github仓库中,
现在的仓库中只有一个可怜的readme.md文件,提交命令如图:
此时,我们的github仓库不在光秃秃,如下图
我们的包最后是要提交到https://packagist.org/packages/submit 这个网站上,当然,你还要在这个网站上注册一个账号
然后才可以上传,我们获取github仓库的https的仓库地址,在packagist网站上点击submit菜单栏,菜单栏地址https://packagist.org/packages/submit,
在packagist网站提交页面,输入github仓库地址,checkout ,之后submit,如图
包就已经上传完成了,此时,如果你想用这个包,是不可以的,
你看,我在我的另外一个项目中,加载这个包composer require abstarfish/abstartfish,不能发现如图:
那我们怎么办呢,难道就不能用了吗?当然是否定的,git页面我们切换到abstarfish项目根目录,提交修改,打一个v0.1的tag,然后提交tag到远程github仓库,如图
点击release,发布一个版本
对勾一定要打上,打上以后就是发布版本了。
此时,packagist网站提示,包现在不是自动更新的需要配置 github server hook,接下来配置这个github server hook。回到github仓库,找到settings,如图增加一个server
输入密码,提交,
user 就是你的github账户名,token这里注意,他是你在packagist网站上获取的,如图
获取到token,回到github网站,填写token,并
点击test server 测试一下,两个网站的关联
哈哈,到这里,两个网站就建立了关联,我们的包就可以随着github release版本的发布,实现自动发布了,现在可以自动发布了,好高兴,再看,packagist网站提示,没有了
到这里,咋们的composer包,就做好了。
我找了自己的一个restful项目,在根目录下 composer require abstarfish/abstarfish 安装咱自己的包
项目包,下载下来了,哈哈,在看一下代码,
和我们的github上代码一致,
然后,就是测试一下,我的包代码到底能不能用,我在我的restful项目中,use 一下Tools类,
将代码传到服务器上,看看是否可以生效,!!!!这里注意一下,我的vender目录是在git的忽略文件里面,所以,我把代码传到服务器上,还是找不到类库,我必须在服务器上 执行composer install,才能将包装在服务器上。
配置仓库
有两种方法对Composer的仓库进行配置:命令行和编辑配置文件。composer config是Composer配置的命令,可以用来配置项目或全局的仓库信息,例如:
composer config [-g] repo.packagist composer
第二种方法是编辑配置文件。编辑项目的composer.json或~/.config/composer/config.json,增加repositories一项配置,例如:
"repositories": { "packagist": { "type": "composer