基础知识
引入的库必须要有composer.json,所以composer.json属性必须要有了解
// composer.json
{
"name": "mysql/package", // 包名,必填。且必须有“/”。引入时,会有错误提示的正则表达式
"description": "this is mysql package", // 包介绍,非必填。
"version": "v1.0.0", // 版本,非必填,通常是不用的,都是通过tag去当版本号
"type": "library", // 类型,非必填,默认就是library
"keywords": ["logging", "events"], // 关键字,非必填
"license": "Apache-2.0", // 许可证,非必填
"authors": [ // 作者,非必填
{
"name": "Nils Adermann",
"email": "naderman@naderman.de",
"homepage": "https://www.naderman.de",
"role": "Developer"
},
],
"require": {
"monolog/monolog": "1.0.1" // 引用
},
"autoload": [], // 自动引入,psr4
"repository": [ // 自定义存储库,就是源(私有库或者其他公开的库源)。这个放到后面下一张着重讲
]
}
官方文档:https://getcomposer.org/doc/04-schema.md#json-schema
私有库引入
方法
通过repository指定引入库的放,composer提供了3种方法|:
- VSC:通过版本控制器
- composer:通过依赖管理器
- Packagist
前提
以github为例。
- 创建一个私有仓库,仓库内添加composer.json
{
"name": "qsl/fpmdocker", // 我的私有报名
"auth": [
{
"name": "qsl",
"homepage": "",
"role": "Developer"
},
],
"requires": { // 我的包引用的包名
"monolog/monolog": "dev-master"
}
}
vsc
通过版本控制器获取包,直接通过git/svn验证,然后拉取包
// 这个项目需要引用qsl/fpmdocker包
// composer.json
{
"name": "qsl/project", // 我的私有报名
"auth": [
{
"name": "qsl",
"homepage": "",
"role": "Developer"
},
],
"repositories": [ // 指定源
{
"type": "vsc", // 拉去类型
"url": "git@github.com:qiushenglei/nginx-fpm-docker.git"
}
],
"requires": { // 我的包引用的包名
"qsl/fpmdocker": "~v1.0.2" // 包名 + 版本号(分支 或者 tag)
}
}
composer update
satis
这个是一个简单的个人私有包管理工具
https://github.com/composer/satis
需要搭建一个satis服务,去扫描指定的仓库内容(他会帮你读出所有满足条件的tag 和 branch),做成一个私有源
- 下载satis
composer create-project composer/satis:dev-main
这里遇到一个报错,提示是composer/stais
这个有个大写的引用,直接去composer.json把大写改成小写就行
- 在
path/to/satis
目录下创建一个satais.json
文件
// satis.json
{
"name": "qsl_satis",
"homepage": "https://qsl.satis.com", // 以后包引用的地址
"repositories": [
{
"type": "git", // satis通过csv去拉A取包
"url": "git@github.com:qiushenglei/nginx-fpm-docker.git"
},
{
"type": "git", // satis通过csv去拉B取包
"url": "git@github.com:qiushenglei/example.git"
}
],
"require-all": false,
"require-dependencies": true,
"require-dev-dependencies": true,
"require": {
"php-amqplib/php-amqplib": "^v3.5.3",
"qiushenglei/fpmdocker": "*"
},
"archive": {
"directory": "dist",
"format": "zip",
"skip-dev": true
},
"config": {
"secure-http": false
}
}
- 通过php脚本去获取包
php bin/satis build <configuration-file> <output-directory>
- 项目通过 指定 私有的源,来拉取数据
//
// 这个项目需要引用qsl/fpmdocker包
// composer.json
{
"name": "qsl/project", // 我的私有报名
"auth": [
{
"name": "qsl",
"homepage": "",
"role": "Developer"
},
],
"repositories": [ // 指定源
{
"type": "composer", // 拉去类型
"url": "https://qsl.satis.com" // 私有源地址
}
],
"requires": { // 我的包引用的包名
"qsl/fpmdocker": "~v1.0.2" // 包名 + 版本号(分支 或者 tag)
}
}
以下列举一下常用于源
https://packagist.org/ (官方源)
https://mirrors.aliyun.com/composer/ (阿里云)
之前遇到一个问题,有一个文件丢失导致系统启动失败,composer.json引入的包指向的是dev-master分支,去github去查看master分支是有这个文件。去官方源看到的包版本的commit也是master分支的commit。
后来发现,composer.json的 repositories.type == composer 修改了源,指向的是阿里云源。阿里云源没有更新版本控制,还是只指向了老版本。
这个问题的反思就是:如果要用私有源(satis服务),就开个定时脚本 通过satis去扫描仓库,更新源内容