如何使用react-native-version仅提升React Native应用的build号
仅递增React Native应用build号的可行方案
下面给出两种不同场景下的可直接使用的实现方案:
方案1:build号同步保存在package.json的version字段中
如果你的版本号格式为主版本.次版本.修订号+build号(示例:1.2.3+5),可以直接用单行命令实现build号自动递增:
- 基础命令(会自动生成git commit和版本tag):
npm version $(node -p "const v = require('./package.json').version.split('+'); v[1] = (v[1] ? parseInt(v[1]) : 0) + 1; v.join('+')")
- 不需要自动打git标签的版本:
npm version $(node -p "const v = require('./package.json').version.split('+'); v[1] = (v[1] ? parseInt(v[1]) : 0) + 1; v.join('+')") --no-git-tag-version
方案2:仅更新iOS/Android原生端的build号,不修改package.json的version字段
这种场景可以写轻量脚本直接修改原生配置文件:
- 项目根目录新建
increment-build.js文件,写入以下内容:
const fs = require('fs'); // 递增Android versionCode const gradlePath = './android/app/build.gradle'; let gradleContent = fs.readFileSync(gradlePath, 'utf8'); gradleContent = gradleContent.replace(/versionCode\s+(\d+)/, (match, code) => `versionCode ${parseInt(code) + 1}`); fs.writeFileSync(gradlePath, gradleContent); // 递增iOS CFBundleVersion,注意把[你的项目名]替换为实际的iOS项目文件夹名 const plistPath = './ios/[你的项目名]/Info.plist'; let plistContent = fs.readFileSync(plistPath, 'utf8'); plistContent = plistContent.replace(/<key>CFBundleVersion<\/key>\s+<string>(\d+)<\/string>/, (match, ver) => `<key>CFBundleVersion</key>\n<string>${parseInt(ver) + 1}</string>`); fs.writeFileSync(plistPath, plistContent); console.log('iOS、Android端build号已完成递增');
- 在package.json的
scripts字段中添加执行脚本的命令:
"scripts": { // 保留原有其他scripts命令,新增下面一行 "build:increment": "node increment-build.js" }
- 后续需要递增build号时,直接运行以下命令即可:
npm run build:increment
补充说明
如果你使用的是Expo托管的React Native项目,只需要修改上述脚本逻辑,直接更新app.json中的ios.buildNumber和android.versionCode字段即可,实现逻辑更简单。
内容的提问来源于stack exchange,提问作者nivsto
相关产品推荐
相关产品推荐

