依赖管理(Dependency Management)是软件工程中的一个重要概念,旨在管理和控制软件组件或库之间的依赖关系,以确保程序能够正确运行
在现代软件开发中,应用程序通常利用许多开源组件和库,这些组件和库存放在中央仓库中,并且它们之间存在复杂的依赖关系
因此,一个成功的项目需要一个强大的依赖管理系统来管理这些依赖项,确保应用程序的正确性

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 服务,让代码同步更新:

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

镜像
由于网络原因,下载包的速度很慢,可以替换为国内镜像提高速度: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 } }