搭建私有的compoer包

Posted by hiho on September 27, 2018

概述

正常情况我们开源的包直接放到https://packagist.org/,在项目使用时直接composer require引入就可以使用。 但在工作中,往往公司的组件是不能公开的,也就需要搭建私有的composer源。 官方给出的方案是搭建satis

安装

使用composer安装satis

composer create-project composer/satis --keep-vcs
cd satis

配置satis.json

satis的配置文件是项目更目录下的satis.json文件,该文件需要自己创建 bash vim satis

{
    "name": "satis packages",
    "homepage": "http://satis.example.com",
    "repositories": [
        { "type": "git", "url": "https://git@gitlab.example.com/hihozhou/exception.git" }
    ],
    "require":{
        "hihozhou/exception":"dev-master",
        "topthink/framework": "5.1.*"`
    }
}
  • name
    • 项目名称,可随意定义
  • homepage
    • 你composer镜像的域名,这里一般配合真实情况使用
  • repositories
    • 需要被索引的git代码仓库地址,一般这里就是配置你的私有仓库地址
  • require
    • 明确定义包名可以减少索引内容,这里包含定义外部公共(如topthink/framework)的和我们自己私有的(如:hihozhou/exception)
    • require中定义的私有包的名称要与repositories中仓库链接项目中的composer.json中定义的name相同
    • 依赖的包如果没有release或者tag版本号设为dev-master*.

2.png

  • 如果需要在索引所有composer包,在配置中添加"require-all" : true,
  • 如果搭建的是http而非htts需要在配置中加上"config":{"secure-http":false}

生成索引

php bin/satis build satis.json ./public -v
  • php bin/satis build 使用php执行脚本bin/satis中的build命令
  • satis.json 指定读取的配置文件
  • ./public 输出的目录
  • -v 显示被索引的包

php7.2问题

可能是satis对7.2还没有兼容,如果7.2直接运行生成索引会发生一下报错:

3.png

解决办法: 找到satis/vendor/twig/twig/lib/Twig/Extension/Core.php文件的第1275行, 将原来的

return count($thing);

修改为:

if(is_array($thing)){
    return count($thing);
}else{
    return mb_strlen((string) $thing, $env->getCharset());

}

然后再次执行

使用php启动服务器

 php -S 0.0.0.0:8088 -t public/

访问127.0.0.1:8088可以看到我们定义索引包tp框架我的异常包 4.png

项目引用

如果你想直接尝试本地,可以直接本地项目配置项目的composer源即可 在composer配置中添加

{
  "repositories": [{
    "type": "composer",
    "url": "http://127.0.0.1:8088"
  }]
}

最后项目composer require hihozhou/exception即可

迭代

  • 2018年09月27日 15:45 初稿

参考