82 lines
2.8 KiB
JavaScript
Raw Permalink Normal View History

2025-12-15 18:27:46 +08:00
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' ? '生产环境' : '开发环境',
2026-01-30 09:54:46 +08:00
robot: CI_DESC === 'test' ? 2: 1,
2025-12-15 18:27:46 +08:00
}
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)
})
})