介绍下相关工具,发布一个自己的包,和在局域网中搭建一个包管理平台🏌️‍♀️

Composer

Composer 是 PHP 的依赖管理工具,它为你解决这类问题:

  • 你有一个项目依赖于若干个库
  • 其中一些库依赖于其他库
  • 你声明你所依赖的东西
  • 找出哪个版本的包需要安装,并安装它们(将它们下载到你的项目中)

要想使用 Composer,就必须要一个 composer.json 文件,该文件包含了项目的依赖和其它的一些元数据

文件详解

{
    "name": "liluoao/api-doc",
    "description": "Generate API doc from PHPDoc.",
    "keywords": [
        "api-documentation",
        "phpdoc"
    ],
    "homepage": "https://github.com/liluoao/api-doc",
    "authors": [
        {
            "name": "Li Luoao",
            "email": "liluoao@qq.com",
            "homepage": "https://github.com/liluoao",
            "role": "Developer"
        }
    ],
    "time": "2018-02-11",
    "license": "MIT",
    "type": "library",
    //要求 包括环境与依赖包
    "require": {
        "php": ">=5.4.0",
        "ext-json": "*"
    }
}

当项目有测试时,可以使用如下属性

{
  "require-dev": {
    "fzaninotto/faker": "^1.4",
    "mockery/mockery": "^1.0",
    "nunomaduro/collision": "^2.0",
    "orchestra/testbench": "3.7.6",
    "phpunit/phpunit": "7.5.1",
    "phpbench/phpbench": "^0.17.0"
  },
  "autoload-dev": {
    "psr-4": {
      "Tests\\": "tests/"
    }
  },
  "scripts": {
    "test": "vendor/bin/phpunit",
    "test-coverage": "vendor/bin/phpunit --coverage-html coverage"
  }
}

像 Laravel 的数据填充并没有写命名空间,是直接在此定义的,还有帮助函数的文件等

{
  "autoload": {
    "classmap": [
      "database/seeds",
      "database/factories"
    ],
    "files": [
      "src/helper.php"
    ],
    "psr-4": {
      "Liluoao\\ApiDoc\\": "src"
    },
  }
}

可以自动添加包里的服务提供者

{
  "extra": {
    "laravel": {
      "providers": [
        "Liluoao\\Providers\\ServiceProvider"
      ],
      "dont-discover": [
        "barryvdh/laravel-ide-helper"
      ]
    }
  }
}

Packagist

Packagist 是包存储库,也是 Composer 的主要资源库

在 Submit 页填写你的项目地址,并在你的项目设置中开启 packagist 服务,让代码同步更新:

GitHub项目开启服务

以上面例子项目发布成功后结果如下图所示

成功示例

镜像

由于网络原因,下载包的速度很慢,可以替换为国内镜像提高速度:Packagist 镜像使用方法

2019-07 更新

《Laravel China 镜像完成历史使命,将于两个月后停用》
《Composer 国内加速:可用镜像列表 》

Satis 管理私有资源

  • 由于公司的架构是内外网分离,开发在内部局域网,无法拉取到公网的 Packagist
  • 顺便维护一些私有的包

好在 Composer 官方提供了这样的静态代码库生成器——Satis

composer create-project composer/satis --stability=dev --keep-vcs

Satis 的配置是通过 satis.json 进行的

satis.json
{ "name": "crm", "homepage": "http://10.0.20.252:10450",//本项目地址,可以WEB访问 "config": { "disable-tls": true, "secure-http": false }, //镜像缓存设置,该设置会缓存require配置项中各个仓库的代码 "archive": { "directory": "dist"//目录名 }, "require": { "monolog/monolog": "1.24.0" //... }, "require-all": false,//为true时将从仓库获取所有相关的依赖包 "repositories": [ { "type": "git", "url": "http://10.0.20.254:10080/library/monolog/monolog.git" } //... ] }

生成项目

php bin/satis build satis.json public/
# 添加新的repo
php bin/satis add http://10.0.20.254:10080/library/guzzlehttp/guzzle.git satis.json

使用静态库时修改 composer.json 文件

composer.json
{ "repositories": [ { "packagist": false }, { "type": "composer", "url": "http://10.0.20.252:10450" } ], "config": { "disable-tls": true, "secure-http": false//非HTTPS } }