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