创建自己的composer私有仓库
安装web服务
私有仓库的创建已经开发成啦一个项目,直接使用下面命令创建就可以
php create-project composer/satis --stability=dev --keep-vcs --no-secure-http
过程有点慢,多等一会儿喽。
安装完成后,进入目录里创建一个 satis.json 里面是记录的一些仓库里有哪些包,和如果有人拉取这些包的时候要怎么去取
如下内容
{ "name": "Test Repository", "homepage": "http://packages.zkeli.com", "repositories": [ { "type": "vcs", "url": "https://github.com/zhaokeli/ank-framework.git" }], "require": { "test/package1": "dev-master", "test/package1": "dev-master" }, "require-all": false, "archive": { "directory": "dist", "format": "tar", "skip-dev": true } }
name:仓库的名字,可以随便定义
homepage:仓库建立之后的的主页地址
repositories:指定去哪获取包,url中需要带.git
require:指定获取哪些包,如果想获取所有包,使用另一个配置项 require-all: true,指定这个可以加快索引速度,不用检索所有标签
archive: 指定把包缓存到本地,不用每次都去git clone,如果是开发时候用的话这个不要使用,不然取不到最新的
archive的配置项如下
directory 必须的,在输出目录中的包存放的目录(在output-dir中)
format 可选的,zip(默认)或者tar
prefix-url 可选的,下载链接的地址,默认是homepage(satis.json中的配置)加上directory
skip-dev 可选的,默认是false,当设置true时,不会下载分支的代码,只会下载tag的代码
absolute-directory 可选的,存放dist文件的本地绝对目录,而不是output-dir/directory
whitelist 可选的,如果设置为一些包名的列表,则只会下载这些包的文件
blacklist 可选的,如果设置为一些包名的列表,则不会下载这些包的文件
checksum 可选的,默认是true,设置为false时,satis不会检测dist文件的sha1 checksum值
生成仓库列表
使用下面命令会生成一个public目录,里面有生成的所有包的信息,然后把这个目录设置到可以用域名访问的地方,比如 packagist.zhaokeli.com
php bin/satis build satis.json public/
也可以使用下面命令行生成指定包的信息
php bin/satis build satis.json public/ this/package that/other-package
使用方法
在自己项目中使用私有 composer 仓库前添加下面配置项
{ "require": { "test/package1": "*" } "config": { "secure-http": false } "repositories": { "packagist": { "type": "composer", "url": "http://packagist.loc" } } }
这样就可以使用自己的私有包啦,但还有个问题,如果自己的包依赖外网的其它一些第三方包的话在自己的私有镜像中又没有记录的就会出现 not found 的错误,解决方法也很简单,多加几个镜像让它按顺序找包,第一个镜像地址没有就到第二个去找,如下
"repositories": { "0": { "type": "composer", "url": "http://packagist.loc" }, "1": { "type": "composer", "url": "https://packages.example.com", "options": { "ssl": { "verify_peer": "true" } } }, "packagist": { "type": "composer", "url": "https://packagist.phpcomposer.com" } }
注意上面序号, packagist 是最后一个被使用的