@lvl/wxapp-cli
Version:
wxapp-cli
77 lines (70 loc) • 1.87 kB
JavaScript
const {
prepareEnv,
error,
purgeCache
} = require('../utils')
const fs = require('fs')
const path = require('path')
const { cliRoot } = require('../config/wxapp-cli.config')
const { execSync } = require('child_process')
/**
* 匹配str中的key,将value替换成val
*
*
*/
function setkey (str, key, val) {
return str.replace(new RegExp(`\\b${key}\\b['"]?\\s*?:\\s*?['"]([^'"]+)['"]`, 'g'), (a) => {
return a.replace(/:\s*?['"]([^'"]+)['"]/, `: '${val}'`)
})
}
async function update (cmd) {
let {
appCtx,
cliTplConfig,
cliTemplate
} = await prepareEnv()
// 将模版更新到最新版本
execSync(`npm update ${cliTplConfig.template.module} --no-save --unsafe-perm`, {
cwd: cliRoot,
stdio: 'inherit'
})
// 清楚tpl包require缓存
purgeCache(cliTplConfig.template.module)
cliTemplate = require(cliTplConfig.template.module)
// 更新 wxapp-cli.config.js 文件中 template 的 version
const fp = path.resolve(appCtx, 'wxapp-cli.config.js')
let data = fs.readFileSync(fp)
data = data.toString()
/**
* 匹配更新data中的 template: { version: 'x.x.x' }
*
*
*/
let tmp = data.split('{'), temp = null
let i = 0, l = tmp.length, deep = 0
const tplDeep = 2
let flag = false
for (; i < l; ++i) {
++deep
temp = tmp[i].split('}')
for (let j = 0; j < temp.length; ++j) {
j > 0 && --deep
if (deep === tplDeep) {
let res = temp[j].match(/\b\w+\b/g)
flag = res && res.length && res.indexOf('template') !== -1
}
if (flag && deep === tplDeep + 1) {
temp[j] = setkey(temp[j], 'version', cliTemplate.version)
}
}
tmp[i] = temp.join('}')
}
data = tmp.join('{')
fs.writeFileSync(fp, data)
}
module.exports = (...args) => {
return update(...args).catch(err => {
error(err)
process.exit(1)
})
}