commit 80f0ceb906e8bae5116575398066c093d1ce50f9 Author: Luk Date: Tue Oct 22 09:02:04 2024 +0800 init diff --git a/app_versioning.js b/app_versioning.js new file mode 100644 index 0000000..5d5e7ed --- /dev/null +++ b/app_versioning.js @@ -0,0 +1,53 @@ +const path = require('path') +const fs = require('fs') + +// 读取 manifest.json ,修改后重新写入 +// https://uniapp.dcloud.net.cn/collocation/vue-config.html +const manifestPath = path.join(__dirname, 'manifest.json') +let Manifest = fs.readFileSync(manifestPath, { encoding: 'utf-8' }) +function replaceManifest (path, value) { + const arr = path.split('.') + const len = arr.length + const lastItem = arr[len - 1] + let i = 0 + let ManifestArr = Manifest.split(/\n/) + for (let index = 0; index < ManifestArr.length; index++) { + const item = ManifestArr[index] + if (new RegExp(`"${arr[i]}"`).test(item)) ++i + if (i === len) { + const hasComma = /,/.test(item) + ManifestArr[index] = item.replace( + new RegExp(`"${lastItem}"[\\s\\S]*:[\\s\\S]*`), + `"${lastItem}" : ${value}${hasComma ? ',' : ''}` + ) + break + } + } + Manifest = ManifestArr.join('\n') +} + +// 注意,在调用 vue.config.js 之前,打包进程就已经读取了 manifest,因此嵌入在 vue.config.js 里更新的数据直到再下一次打包时才生效,导致被打包的 uni.getSystemInfoSync().appVersionCode 仍然为之前的版本号。 +// 为了让打包的版本正确,解决方案 1)在 package.json 里提供一个定时任务,每小时更新一次,但这样仍然可能因为打包和部署发生在两个小时里而出错。 +// 解决方案 2)通过命令行方式打包+部署一体自动化,即使发生在两个小时里也正确,只要不要在这期间手动或定时的额外更新。 +const versionCode = new Date() + .toJSON() + .replace(/:.*/, '') + .replace(/[-|T]/g, '') + .substring(2) +replaceManifest( + 'versionName', + '"' + versionCode.slice(0, 4) + '.' + versionCode.slice(4) + '"' +) +replaceManifest('versionCode', parseInt(versionCode)) +// 万一修改了应用的名称,则也修改 manifest: +// const callname = require('./store').state.callnames.enUS +// replaceManifest('name', `"${callname}"`) +// replaceManifest('h5.title', `"${callname}"`) + +fs.writeFileSync(manifestPath, Manifest, { flag: 'w' }) + +//fs.writeFileSync(path.join(__dirname, 'versionCode-created.json'), versionCode, { flag: 'w' }) +//console.log(new Date(), 'versionCode =', versionCode) +console.log(versionCode) + +module.exports = versionCode