const fs = require('fs') const ci = require('miniprogram-ci') const path = require('path') const projectPath = path.resolve(__dirname, '../') const CI_DESC = process.env.CI_DESC console.log('项目路径UNI_MODE', CI_DESC) // 1. 读取 project.config.json // 1. 确认文件路径 const projectConfigPath = path.resolve(__dirname, './project.config.json') console.log('配置文件路径:', projectConfigPath) // 2. 读取原文件 const projectConfig = JSON.parse(fs.readFileSync(projectConfigPath, 'utf-8')) // 3. 修改版本号(示例:1.0.0 → 1.0.1) const versionParts = projectConfig.version.split('.') versionParts[2] = String(Number(versionParts[2]) + 1) projectConfig.version = versionParts.join('.') console.log('版本号:', versionParts) // 4. 写入前验证 try { fs.accessSync(projectConfigPath, fs.constants.W_OK) const newContent = JSON.stringify(projectConfig, null, 2) fs.writeFileSync(projectConfigPath, newContent, 'utf-8') console.log('版本号已更新为:', projectConfig.version) } catch (err) { console.error('操作失败:', err) process.exit(1) // 非零退出码表示错误 } // 获取所有小程序上传密钥文件 const privateList = fs.readdirSync(`${projectPath}/ci/privateKey`) const uploadInfo = { version: projectConfig.version, desc: CI_DESC === 'test' ? '测试环境' : CI_DESC === 'prod' ? '生产环境' : '开发环境', robot: CI_DESC === 'test' ? 2: 1, } const command = process.argv.slice(2)[0] console.log('privateList', privateList) privateList.forEach(item => { console.log('item', item) let appId = item.split('.')[1] // item: private.appId.key // 创建项目对象 const project = new ci.Project({ appid: appId, // 小程序appid type: 'miniProgram', // 类型,小程序或小游戏 projectPath: `${projectPath}/dist/build/mp-weixin`, // 项目路径 privateKeyPath: `${projectPath}/ci/privateKey/${item}`, // 密钥路径 ignores: ['node_modules/**/*'] // 忽略的文件 }) let ciFn = null if (command === 'upload') { ciFn = ci.upload({ project, ...uploadInfo, setting: { es6: true, // 对应小程序开发者工具的 "es6 转 es5" es7: true, // 对应小程序开发者工具的 "增强编译" minify: true // 是否压缩代码 } }) } else if (command === 'preview') { ciFn = ci.preview({ project, setting: { es6: true, // 对应小程序开发者工具的 "es6 转 es5" es7: true // 对应小程序开发者工具的 "增强编译" }, qrcodeFormat: 'image', qrcodeOutputDest: `${projectPath}/ci/qrcode/${appId}_qrcode.jpg`, onProgressUpdate: console.log }) } // 调用 ciFn .then(res => { console.log('执行成功', res) }) .catch(error => { console.log('执行失败', error) }) })