React Native Versioning为何寻找pre文件夹?版本构建号同步缺什么?
一、"pre"文件夹报错的原因
你遇到的pre/package.json找不到的问题,是因为package.json里的preversion脚本参数写错了。
npm的preversion是生命周期钩子,运行npm version时会自动触发这个脚本。你的scripts里应该写了类似:
"preversion": "react-native-version pre"
这里的pre是多余的参数——react-native-version工具不需要这个参数,它会把pre当成要读取的目录路径,所以才会去找/Projects/ReactNative/SimpleParamPassing/pre/package.json,而这个目录根本不存在。
解决方法:把preversion脚本改成"react-native-version"(不带pre参数),或者根据你需要的同步规则添加正确参数,比如react-native-version --ios --android。
二、iOS/Android版本号/构建号自动同步缺少的配置
要实现双端版本号、构建号自动同步,还需要补充以下配置:
1. 配置react-native-version的同步规则
在package.json根节点添加react-native-version字段,明确指定iOS和Android的版本、构建号同步逻辑:
"react-native-version": { "ios": { "version": "sync", // 同步package.json的version到iOS的CFBundleShortVersionString "build": "increment" // 每次构建自动递增iOS的CFBundleVersion }, "android": { "version": "sync", // 同步package.json的version到Android的versionName "build": "increment" // 每次构建自动递增Android的versionCode }, "podfile": true // 如果用CocoaPods,同步Podfile.lock的版本(可选) }
2. 修正npm脚本钩子
调整package.json的scripts,确保版本变更流程正确:
"scripts": { "preversion": "react-native-version", // 版本变更前同步双端版本号 "postversion": "bundle exec fastlane bump" // 版本变更后用Fastlane处理构建号(可选,看你需求) }
这样运行npm version patch --no-git-tag-version时,会先自动同步双端版本号,再触发Fastlane的构建号更新。
3. 配置Fastlane的bump逻辑
在Fastfile里定义bump lane,确保构建号的更新和react-native-version不冲突。比如:
lane :bump do # iOS:递增构建号(如果react-native-version没处理的话) increment_build_number( xcodeproj: "./ios/YourProjectName.xcodeproj", target: "YourTargetName" # 替换成你的iOS Target名 ) # Android:递增versionCode(或者同步package.json的版本) gradle( task: "assemble", properties: { "android.incrementVersionCode" => true } ) end
如果react-native-version已经配置了build: "increment",Fastlane的这部分可以省略,避免重复递增。
4. 确保文件权限
确认react-native-version和Fastlane有修改以下文件的权限:
- iOS:
ios/YourProject/Info.plist、ios/YourProject.xcodeproj/project.pbxproj - Android:
android/app/build.gradle
内容的提问来源于stack exchange,提问作者justdan0227

