/** * 微信小程序上传脚本 * * 用法: * node scripts/upload-wx.js # 版本号自动取 client/src/manifest.json 的 versionName * node scripts/upload-wx.js --desc "修复描述" * node scripts/upload-wx.js --version 1.2.1 # 必须与 manifest 一致,否则拒绝上传 * * 版本规则见 docs/版本规则.md: * 主版本=产品形态重构;次版本=新功能模块;修订号=修复与微调 */ const ci = require('miniprogram-ci'); const path = require('path'); const fs = require('fs'); function parseArgs(argv) { const out = {}; for (let i = 0; i < argv.length; i++) { const a = argv[i]; if (a.startsWith('--')) { const key = a.slice(2); const next = argv[i + 1]; if (next && !next.startsWith('--')) { out[key] = next; i++; } else out[key] = true; } else { // 兼容位置参数:第一个是版本,第二个是描述 if (out.version === undefined) out.version = a; else if (out.desc === undefined) out.desc = a; } } return out; } (async () => { const args = parseArgs(process.argv.slice(2)); const manifest = JSON.parse( fs.readFileSync(path.resolve(__dirname, '../client/src/manifest.json'), 'utf-8') ); const manifestVersion = manifest.versionName; // 版本号唯一事实来源是 manifest.json;显式传参必须一致(防止包与元数据漂移) if (args.version && args.version !== manifestVersion) { console.log(`ERROR: --version ${args.version} 与 manifest.json versionName ${manifestVersion} 不一致。版本号请改 manifest.json(唯一事实来源)。`); process.exit(1); } const version = manifestVersion; const desc = args.desc || 'release'; const projectPath = path.resolve(__dirname, '../client/dist/build/mp-weixin'); const project = new ci.Project({ appid: 'wxdad62baf4ccd09e3', type: 'miniProgram', projectPath, privateKeyPath: '/root/Hermes-workspace/宇之然AI维度appid/private.wxdad62baf4ccd09e3.key', ignores: ['node_modules/**/*'], }); console.log('START_UPLOAD'); console.log(`version=${version} desc=${desc}`); const uploadResult = await ci.upload({ project, version, desc, setting: { es6: true, es7: true, minify: true, autoPrefixWXSS: true }, }); const resultStr = JSON.stringify(uploadResult); fs.writeFileSync('/tmp/upload-result.json', resultStr); console.log('SUCCESS:' + resultStr); })().catch(err => { console.log('ERROR:' + err.message); process.exit(1); });