init
This commit is contained in:
		
						commit
						80f0ceb906
					
				
							
								
								
									
										53
									
								
								app_versioning.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								app_versioning.js
									
									
									
									
									
										Normal file
									
								
							| @ -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 | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user