还在为微信小程序的版本管理和发布感到烦恼吗?每次手动修改版本号、复制git提交信息、点击上传?让我们通过一个自动化脚本,一键搞定这些繁琐的步骤!
一、完整流程图
开始
↓
检查代码是否提交 → 否 → 退出
↓ 是
更新版本号
↓
自动提交版本更新
↓
执行项目构建
↓
上传小程序代码
↓
结束
二、前期准备
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, null, 2));
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. 递增版本号
2. 提交版本更新
3. 构建项目
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. 添加预检查
const checkBeforeDeploy = () => {
// 检查git状态
const status = execSync('git status --porcelain').toString();
if (status) {
throw new Error('有未提交的更改,请先提交');
}
// 检查测试
execSync('npm run test');
};
1. 添加钩子
{
"husky": {
"hooks": {
"pre-deploy": "npm run test"
}
}
}
这不仅提高了开发效率,也保证了版本管理的规范性。你还在手动发布小程序吗?快来试试这套自动化方案吧!
如果觉得文章有帮助,欢迎点赞转发!如果你有更好的发布流程建议,也欢迎在评论区分享!