背景
每次更新脚手架都需要人力进行通知用户,想让用户能够感知到npm包需要更新。 虽然脚手架是使用了npm包的形式新建的,但是包地址存放在公司的gitlab上,故不支持npm的版本检测。
解决
第一种,使用服务端提供接口支持
这种方案需要占用到服务资源,故此放弃。
第二种,通过读取gitlab文件内容进行判断
思路:
graph TD
执行任意指令 --> 脚手架
脚手架 -.读取gitlabApi上的json文件与本地的json文件对比.-> 判断是否需要更新{判断是否需要更新}
判断是否需要更新 -.不需要.-> 结束
判断是否需要更新 -.需要.-> 询问用户是否更新{询问用户是否更新}
询问用户是否更新 -.不需要.-> 结束
询问用户是否更新 -.需要.-> 执行脚手架更新
执行脚手架更新 --> 结束
获取gitlab文件内容的方法
通过查阅api文档,可以知道,如果要获取gitlab上的文件内容需要用到如下几个参数
1、id的获取
点击进入gitlab所在的项目,这个就是项目id
2、file_path的获取
点击你要读取的项目文件最后的文件路径。
3、ref的获取
指的是你要读取哪个分支的文件
4、your_access_token
个人的token,可通过如下获取
5、gitlab.example.com的获取
这个是你公司的访问gitlba的域名。每个公司都不一样。访问gitlab后直接复制域名即可。
6、发送请求
// 获取gitlab文件内容 https://docs.gitlab.com/ee/api/repository_files.html
export function httpGetFileContent(fileContent: any): Promise<any> {
let ref = 'master';
return instance.request({
url: `api/v4/projects/${fileContent.id}/repository/files/${fileContent.file_path}`,
method: 'GET', // default
params: { ref },
headers: {
'PRIVATE-TOKEN': fileContent.priavte_token,
}
})
}
httpGetFileContent({
id: 6666,
priavte_token: TheToken.priavte_token,
file_path:encodeURI('package.json')
}).then((res)=>{
let contentBase64 = Buffer.from(res.data.content,'base64'); // 文件内容返回的是base64 需要进行转换成字符串
console.log(contentBase64.toString('utf-8')); // 转换成字符串
}).catch((res)=>{
console.error(res);
})