UNPKG

@lvl/wxapp-cli

Version:

wxapp-cli

77 lines (70 loc) 1.87 kB
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) }) }