UNPKG

uni-packing-wgt

Version:

uniapp wgt多环境打包、调试、发布(七牛云)插件

140 lines (116 loc) 5.14 kB
const qiniu = require("qiniu") const path = require('path') const fs = require("fs") const { initConfig, configFilePath, configOutputFilePath, configReleaseFilePath, manifestPath } = require("./file-mgr") const config = require(configFilePath) const { syncServer, checkYiConfigExist, taskMgr } = require("./server-mgr"); const { isEmptyMulti } = require("./utils"); class Uploader { upload(filePath) { const isRelease = filePath.includes("release") const isBeta = filePath.includes("beta") const isDev = filePath.includes("dev") if (isRelease && !fs.existsSync(configReleaseFilePath)) { return } let bucket = config.upload.devBucket let accessKey = config.upload.devAccessKey let secretKey = config.upload.devSecretKey let domain = config.upload.devDomainName let dir = config.upload.devDir const isHarmonySeparateDir = config.isHarmonySeparateDir === true if (isRelease) { const releaseConfig = require(configReleaseFilePath) bucket = releaseConfig.upload.bucket accessKey = releaseConfig.upload.accessKey secretKey = releaseConfig.upload.secretKey domain = releaseConfig.upload.domainName dir = releaseConfig.upload.dir } if (isEmptyMulti(bucket, accessKey, secretKey, domain, dir)) { console.error("检查是否配置七牛相关参数") return } // 测试情况使用getFileName作为key const sp = isDev === true ? 'dev' : isBeta === true ? 'beta' : 'release' let key = `${dir}/${Date.now()}` if (filePath?.includes("./dist")) { key = filePath.replace("./dist", dir) console.log("qiniu key origin: ", key); } else { key = `${dir}/${sp}/${this.#getFileName(filePath)}` } const releaseConfig = require(configReleaseFilePath) const { configs } = releaseConfig if (isHarmonySeparateDir) { if (configs.updateOhos === true) { // 适配鸿蒙 key = `${dir}/ohos/${sp}/${this.#getFileName(filePath)}` } } console.log("qiniu key: ", key); let mac = new qiniu.auth.digest.Mac(accessKey, secretKey) const options = { scope: bucket + ":" + key } const putPolicy = new qiniu.rs.PutPolicy(options) const uploadToken = putPolicy.uploadToken(mac) const configQi = new qiniu.conf.Config() const localFile = filePath const formUploader = new qiniu.form_up.FormUploader(configQi) const putExtra = new qiniu.form_up.PutExtra() const target = this return formUploader.putFile(uploadToken, key, localFile, putExtra, async function (respErr, respBody, respInfo) { if (respErr) { console.log("========上传失败========") console.error(respErr) return } if (respInfo.statusCode === 200) { console.log(respBody); const bucketManager = new qiniu.rs.BucketManager(mac, configQi) const publicDownloadUrl = bucketManager.publicDownloadUrl(domain, key) console.log("前往刷新url: ", publicDownloadUrl) if (checkYiConfigExist()) { if (isDev) await syncServer({ url: publicDownloadUrl, dev: true }) if (isBeta) await syncServer({ url: publicDownloadUrl, beta: true }) if (isRelease) await syncServer({ url: publicDownloadUrl, release: true }) } else { // 七牛sdk cdn if (config.refreshUrl) target.refreshCdn(accessKey, secretKey, publicDownloadUrl) } } else { console.log("========上传失败========") console.log(respInfo.statusCode); console.log(respBody); } }) } refreshCdn(accessKey, secretKey, publicDownloadUrl) { let mac2 = new qiniu.auth.digest.Mac(accessKey, secretKey) let cdnManager = new qiniu.cdn.CdnManager(mac2); //URL 列表 let urlsToRefresh = [publicDownloadUrl]; //刷新链接,单次请求链接不可以超过100个,如果超过,请分批发送请求 cdnManager.refreshUrls(urlsToRefresh, function (err, respBody, respInfo) { console.log("") console.log("=========== 缓存刷新结果 =============") if (err) { console.error(err) return } console.log(respInfo.statusCode); if (respInfo.statusCode === 200) { console.log(JSON.stringify(respBody, null, 2)) } }); } uploadFiles(...filePaths) { return Promise.allSettled(filePaths.map(path => this.upload(path))) } #getFileName = (filePath) => { return path.basename(filePath) } } module.exports = new Uploader()