/** * build成功后的运行逻辑 */ const path = require("path"); const fs = require("fs"); const oss = require("ali-oss"); const { execSync } = require("child_process"); // 获取需要更新的文件 const NewFiles = (process.argv[2] || "").split("=")[1]; console.log(NewFiles); class saveOssGitte { deleteFiles = []; constructor() { this.localDir = "dist/"; this.baseOssDir = "topic/activity/"; this.client = new oss({ region: "oss-cn-chengdu", // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。 accessKeyId: "LTAI4GEBqfF1GX4VwsYU2Wpg", accessKeySecret: "rVIv0E1lRfXOCrAmkFTZnfgWiuv4ea", bucket: "smcic-index", }); this.execFun(); // if (!NewFiles) this.delDir(); // else this.delOneDir(NewFiles); this.delDir() } /** * 上传git */ execFun() { try { execSync("git add ."); execSync(`git commit -m "${process.argv[2] || "提交"}"`); execSync("git push -u origin master"); // execSync("git push -u github master"); console.log("上传git---完成"); } catch (e) { console.log("上传git---失败"); console.error(e); } } /** * 获得上传目录下的所有文件路径 * 删除oss指定路径下文件 */ async delDir() { let list = await this.client.list({ prefix: this.baseOssDir, }); (list.objects || []).splice(0, 1); // 删除文件 await Promise.all( list.objects.map(async v => { try { await this.client.delete(v.name); } catch (error) { error.failObjectName = v.name; return error; } }) ); console.log("oss文件清除---完成"); try { await this.getFiles(path.resolve(__dirname, "./" + this.localDir)); } catch (err) { console.log("数据上传oss---失败"); } } /** * 删除指定文件 * @param {string} pathDir */ async delOneDir(pathDir) { try { // await this.client.delete(this.baseOssDir + pathDir + ".html"); // await this.client.delete(this.baseOssDir + "/js/" + pathDir + ".js"); // this.deleteFiles.push(this.baseOssDir + pathDir + ".html"); // this.deleteFiles.push(this.baseOssDir + "/js/" + pathDir + ".js"); // 查找静态资源下对应的文件 let listimage = await this.client.list({ prefix: this.baseOssDir + "/img/", }); let listmedia = await this.client.list({ prefix: this.baseOssDir + "/media/", }); let listfonts = await this.client.list({ prefix: this.baseOssDir + "/fonts/", }); console.log(listimage); // console.log(listmedia); // console.log(listfonts); // let imageList = listimage.objects.filter(v => v.name.includes(pathDir)); // let mediaList = listmedia.objects.filter(v => v.name.includes(pathDir)); // let fontsList = listfonts.objects.filter(v => v.name.includes(pathDir)); // await Promise.all( // imageList.map(async v => { // try { // await this.client.delete(v.name); // 删除文件 // this.deleteFiles.push(v.name); // } catch (err) { // err.failObjectName = v.name; // return err; // } // }), // mediaList.map(async v => { // try { // await this.client.delete(v.name); // 删除文件 // this.deleteFiles.push(v.name); // } catch (err) { // err.failObjectName = v.name; // return err; // } // }), // fontsList.map(async v => { // try { // await this.client.delete(v.name); // 删除文件 // this.deleteFiles.push(v.name); // } catch (err) { // err.failObjectName = v.name; // return err; // } // }) // ) console.log("oss文件清除---完成"); } catch (err) { console.log("oss文件清除---失败"); console.error(err); } } /** * 获取localDir下的所有文件路径 * @param {string} pathDir */ async getFiles(pathDir) { const dirList = fs.readdirSync(pathDir) || []; for (let i = 0; i < dirList.length; i++) { const P = [pathDir, dirList[i]]; const stat = fs.lstatSync(P.join("\\")); if (!stat.isDirectory()) { await this.upFileOSS(P); } else this.getFiles(P.join("\\")); } } /** * 上传文件到oss * @param {string} filePath */ async upFileOSS(filePath) { try { // 填写OSS文件完整路径和本地文件的完整路径。OSS文件完整路径中不能包含Bucket名称。 // 如果本地文件的完整路径中未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件。 let dir = filePath[0].split("\\"); dir = dir.reverse()[0] + "/"; if (dir === this.localDir) dir = ""; await this.client.put( this.baseOssDir + dir + filePath[1], path.normalize(filePath.join("\\")) // 自定义headers //,{headers} ); // const result = await client.multipartUpload(filePath[1], this.baseOssDir + dir + filePath[1], { // partSize: 1 * 1024 * 1024, // 分片大小1MB // progress: (p) => console.log(`进度:${Math.round(p * 100)}%`) // }); // console.log('分片上传完成:', result); console.log("数据上传oss---完成"); } catch (e) { console.error("未成功上传:", filePath.join("\\")); console.log("err--->", e); } } } new saveOssGitte();