微信小程序自动版本号管理与发布

文摘   2024-11-07 20:31   湖北  



还在为微信小程序的版本管理和发布感到烦恼吗?每次手动修改版本号、复制git提交信息、点击上传?让我们通过一个自动化脚本,一键搞定这些繁琐的步骤!

一、完整流程图

开始
 ↓
检查代码是否提交 → 否 → 退出
 ↓ 是
更新版本号
 ↓
自动提交版本更新
 ↓
执行项目构建
 ↓
上传小程序代码
 ↓
结束

二、前期准备

  1. 1. 环境要求

  • • Node.js 环境

  • • 微信开发者工具已安装

  • • Git已安装并配置

  • 2. 项目配置

    // package.json
    {
      "version": "1.0.0",
      "scripts": {
        "deploy": "node scripts/upload.js",
        "deploy:minor": "node scripts/upload.js minor",
        "deploy:major": "node scripts/upload.js major"
      }
    }
  • 三、核心代码

    在项目根目录创建 scripts/upload.js

    const { execSync } = require('child_process');
    const path = require('path');
    const fs = require('fs');

    // 更新版本号函数
    const updateVersion = (type = 'patch') => {
      const packagePath = path.resolve(__dirname, '../package.json');
      const package = require(packagePath);
      const versions = package.version.split('.');
      
      switch(type) {
        case 'major'// 主版本号
          versions[0] = (parseInt(versions[0]) + 1).toString();
          versions[1] = '0';
          versions[2] = '0';
          break;
        case 'minor'// 次版本号
          versions[1] = (parseInt(versions[1]) + 1).toString();
          versions[2] = '0';
          break;
        case 'patch'// 修订号
          versions[2] = (parseInt(versions[2]) + 1).toString();
          break;
      }
      
      const newVersion = versions.join('.');
      package.version = newVersion;
      fs.writeFileSync(packagePath, JSON.stringify(package, null2));
      return newVersion;
    };

    // 获取提交信息
    const getLastCommitMessage = () => {
      try {
        return execSync('git log -1 --pretty=%B').toString().trim();
      } catch (error) {
        return '版本更新';
      }
    };

    // 主函数
    const deploy = async () => {
      try {
        // 1. 更新版本号
        console.log('正在更新版本号...');
        const newVersion = updateVersion();
        console.log(`版本号已更新: ${newVersion}`);

        // 2. 提交版本号更新
        console.log('提交版本更新...');
        execSync('git add package.json');
        execSync(`git commit -m "chore: bump version to ${newVersion}"`);
        
        // 3. 构建项目
        console.log('构建项目...');
        execSync('npm run build');

        // 4. 上传小程序
        console.log('开始上传微信小程序...');
        const projectPath = path.resolve(__dirname, '../dist/build/mp-weixin');
        const cliPath = '/Applications/wechatwebdevtools.app/Contents/MacOS/cli';
        const desc = getLastCommitMessage();
        const wxVersion = newVersion.replace(/\./g'');
        
        execSync(
          `${cliPath} upload --project ${projectPath} --version ${wxVersion} --desc "${desc}"`,
          { stdio'inherit' }
        );
        
        console.log('发布完成!');
        
      } catch (error) {
        console.error('发布失败:', error);
        process.exit(1);
      }
    };

    deploy();

    四、使用步骤说明

    1. 日常开发

    # 1. 开发新功能
    # 2. 提交代码
    git add .
    git commit -m "feat: 添加新功能"

    2. 发布更新

    根据更新程度选择以下命令之一:

    # 小改动(修订号+1)
    npm run deploy

    # 新功能(次版本号+1)
    npm run deploy:minor

    # 重大更新(主版本号+1)
    npm run deploy:major

    3. 自动执行流程

    脚本会自动:

    1. 1. 递增版本号

    2. 2. 提交版本更新

    3. 3. 构建项目

    4. 4. 上传小程序

    五、版本号规则

    主版本号.次版本号.修订号
       ↑        ↑       ↑
       │        │       └─ 问题修复,小改动 (0-9)
       │        └───────── 新功能,兼容旧版 (0-9)
       └─────────────────── 重大更新,不兼容 (0-9)

    示例:

    • • 1.0.0 → 1.0.1 (修复bug)

    • • 1.0.1 → 1.1.0 (新功能)

    • • 1.1.0 → 2.0.0 (重大更新)

    六、错误处理流程

    1. 上传失败

    检查错误信息 → 解决问题 → 重新执行发布命令

    常见问题:

    • • 开发者工具未打开

    • • 项目路径错误

    • • 构建失败

    2. 版本号问题

    手动修改 package.json → 提交修改 → 重新发布

    3. git提交问题

    解决冲突 → 提交更改 → 重新发布

    七、最佳实践建议

    1. 发布前检查清单

    • • 代码已完整提交

    • • 测试已通过

    • • 文档已更新

    • • 分支已同步

    2. 版本号选择建议

    • • 修复bug:使用 npm run deploy

    • • 新功能:使用 npm run deploy:minor

    • • 重大更新:使用 npm run deploy:major

    3. 提交信息规范

    feat: 新功能
    fix: 修复bug
    docs: 文档更新
    style: 格式调整
    refactor: 重构

    八、进阶配置建议

    1. 1. 添加预检查

    const checkBeforeDeploy = () => {
      // 检查git状态
      const status = execSync('git status --porcelain').toString();
      if (status) {
        throw new Error('有未提交的更改,请先提交');
      }
      
      // 检查测试
      execSync('npm run test');
    };
    1. 1. 添加钩子

    {
      "husky": {
        "hooks": {
          "pre-deploy": "npm run test"
        }
      }
    }


    1. 这不仅提高了开发效率,也保证了版本管理的规范性。你还在手动发布小程序吗?快来试试这套自动化方案吧!

    如果觉得文章有帮助,欢迎点赞转发!如果你有更好的发布流程建议,也欢迎在评论区分享!


    字节笔记本
    专注于科技领域的分享,AIGC,全栈开发,产品运营
     最新文章