依赖管理(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 进行的
{
"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 文件
{
"repositories": [
{
"packagist": false
},
{
"type": "composer",
"url": "http://10.0.20.252:10450"
}
],
"config": {
"disable-tls": true,
"secure-http": false//非HTTPS
}
}