uni-app 微信小程序自动上传版本

# uni-app 微信小程序自动上传版本

# 环境相关

node 版本 node -v 14.19.1

npm 依赖包 chalk inquirer

# 项目目录结构

项目目录结构

# 主要文件

# 自动更新版本号

./ci/change-version.js 文件,设置自动更新版本号

// ./ci/change-version.js
var inquirer = require('inquirer')
var chalk = require('chalk')
var { version } = require('./../src/package.json')
var fs = require('fs')
var path = require('path')

/**
 * 更新版本
 * 末位版本号
 * 规则:默认+1
 */
function updateVersion(num = 1) {
  let versionArr = version.split('.')
  var patchVersion = Number(versionArr[versionArr.length - 1]) + num
  return [versionArr[0], versionArr[1], patchVersion].join('.')
}

/**
 * 修改版本号
 */
function changeVersion(version) {
  const pkgPath = path.join(__dirname, './../src/package.json')
  let pkg = fs.readFileSync(pkgPath)
  pkg = JSON.parse(pkg)
  pkg.version = version
  fs.writeFileSync(pkgPath, JSON.stringify(pkg, null, 4))
  console.log(chalk.green(`**************修改版本号成功: ${version}************ `))
}

/**
 * 修改构建生成文件夹
 */
function changeBuldDir() {
  const pkgPath = path.join(__dirname, './../project.config.json')
  let pkg = fs.readFileSync(pkgPath)
  pkg = JSON.parse(pkg)
  const arg = process.argv.splice(2)[0]
	// uni-app 生产环境构建目录为 dist/build/mp-weixin 其他环境为 dist/dev/mp-weixin 因此需要根据不同环境修改上传代码入口
  let dir = arg === 'pro' ? 'dist/build/mp-weixin/' : 'dist/dev/mp-weixin'
  if (pkg.miniprogramRoot !== dir) {
    pkg.miniprogramRoot = dir
    fs.writeFileSync(pkgPath, JSON.stringify(pkg, null, 4))
  }
  console.log(chalk.green(`**************构建生成文件夹: ${dir}************ `))
}

// 自动更新版本号
inquirer
  .prompt([
    {
      name: 'version',
      message: '新版本号',
      type: 'input',
      default: `${updateVersion()}`
    }
  ])
  .then(function (answers) {
    console.log(chalk.green(`**************新版本号: ${answers.version}************ `))
    try {
      changeVersion(answers.version)
      changeBuldDir()
    } catch (error) {
      console.error(error)
      process.exit()
    }
  })

# 设置配置文件目录

./ci/cicmd-config.sh 脚本配置文件

# 设置微信开发者工具-命令行工具位置(绝对路径)
cli=/g/xiaoc1103/exeBox/微信web开发者工具/cli.bat

# 设置项目根路径(绝对路径)
project_base=/g/xiaoc1103/code/gitlab/supplier-member/supplier-member-wechat

# 执行脚本文件内容

./ci/cicmd.sh 脚本文件内容

#!/bin/bash

# 确保脚本抛出遇到的错误
set -e

echo -e '\033[32m获取基础信息...\033[0m'
# node版本
node -v

# npm版本
npm -v

# 当前环境变量sit,uat,pro
env=$1
echo 当前环境:$env

# 当前分支
branch_all=`git branch`
branch=${branch_all:2}
echo 当前分支:$branch

# 获取cicmd配置文件
source ci/cicmd-config.sh

# 获取项目地址
if [ $env = "pro" ] ; then
project_path="$project_base/dist/build/mp-weixin"
else
project_path="$project_base/dist/dev/mp-weixin"
fi
echo 项目地址:$project_path

# 设置版本号
version=$(cat ./src/package.json | sed 's/,/\n/g' | grep "version" | sed 's/:/\n/g' | sed '1d' | sed 's/}//g' | sed 's/"//g'| sed 's/\s//g' )
echo 当前版本:$version

# 打包构建
echo -e '\033[32m打包生成部署文件...\033[0m'
npm run build:$env

# 获取当前时间
# time=$(date "+%Y-%m-%d %H:%M:%S")

# 获取上一次git提交信息作为上传的提交信息
echo -e '\033[32m获取版本提交信息...\033[0m'
head_commit_info=`git log --pretty=format:“%s” "HEAD" -1`
head_commit_author=`git log --pretty=format:“%an” "HEAD" -1`
head_commit_date=`git log --pretty=format:“%cd” "HEAD" -1 --date=format:'%Y-%m-%d %H:%M:%S'`
head_commit_desc="更新说明:${head_commit_info} 更新日期:${head_commit_date} 更新环境:${env}"
echo $head_commit_desc

# 上传
echo -e '\033[32m执行上传...\033[0m'
$cli upload --project $project_base -v $version -d "${head_commit_desc}"

# 将版本更新文件提交远程仓库
echo -e '\033[32m执行版本更新推送...\033[0m'
git add .
git commit -m"V${version}"
git push origin $branch

# 预览
# $cli preview --project $project_base

# 执行指令

./package.json

{
	"scripts": {
		"build:sit": "cross-env NODE_ENV=sit UNI_PLATFORM=mp-weixin vue-cli-service uni-build",
		"build:uat": "cross-env NODE_ENV=uat UNI_PLATFORM=mp-weixin vue-cli-service uni-build",
		"build:pro": "cross-env NODE_ENV=production UNI_PLATFORM=mp-weixin vue-cli-service uni-build",
		"ci:sit": "bash ./ci/cicmd.sh sit",
		"ci:uat": "bash ./ci/cicmd.sh uat",
		"ci:pro": "bash ./ci/cicmd.sh pro",
		"submit:sit": "node ./ci/change-version.js sit && yarn ci:sit",
		"submit:uat": "node ./ci/change-version.js uat && yarn ci:uat",
		"submit:pro": "node ./ci/change-version.js pro && yarn ci:pro"
	}
}

scripts