deploy-base
差异化上传的基础类
// 安装为正式依赖
npm i @front-lib/deploy-base -S
// 安装为环境依赖
npm i @front-lib/deploy-base -D
用法
引入基础类
const DeployBase = require('@front-lib/deploy-base')
继承并扩展基础类
class MyDeploy extends DeployBase {
// 实现同步单个文件, 必须实现
async syncFile ({ uri, id, hash, current, total, times }) {
// uri为文件的绝对路径
// id为文件在localRoot下的路由
// hash为文件内容的 md5+sha1
// current 当前是第几个文件
// total 需要上传的文件总数
// times 当前文件是第几次重试,从1开始
}
// 实现同步单个目录
async syncDoc ({ uri, id, current, total, times }) {
// uri为目录的绝对路径
// id为文件在localRoot下的路由
// current 当前是第几个文件
// total 需要上传的文件总数
// times 当前文件是第几次重试,从1开始
}
// 获取远程的地图文件
async getRemoteMap () {
// 读取远程地图文件,并返回json数据
return {
dirs: {},
files: {}
}
}
// 把地图文件写到远程
async setRemoteMap ({ dirs, files }) {}
}
实例化继承类并执行deploy方法
const ins = new MyDeploy({
// 一共可以重试上传的次数, 默认一共尝试3次上传,如果全部失败则中断上传
times: 3,
// 要deploy的文件夹根目录
localRoot: path.join(__dirname, 'path/to'),
// localRoot 下要忽略的文件,遵守glob规则,支持数组/字符串格式
// ignores: '**/.git/**',
ignores: ['**/.git/**', 'node_modules/**'],
// 是否把文件内容hash后与远程地图里面的文件hash比较后,只deploy有变化的文件
// 如果设置为false,则不与远程地图比较,全部重新deploy
compare: true,
// glob的options设置
glob: {}
})
async function foo () {
// 开始 deploy
await ins.deploy()
// deploy 结束
}
foo()
相关
ignores与glob pattern关系
- 如果
ignores
为字符串,则直接作为glob pattern
- 如果
ignores
为数组且长度为1,则ignores[0]
作为glob pattern
- 如果
ignores
为数组,则经'{' + ignores.join(',') + '}'
处理后作为glob pattern