react-native-version
Version your React Native app in a npm version
fashion.
Seamlessly shadows the behaviour of npm version.
npm-scripts hook (automatic method)
Setup
$ npm install react-native-version --save-dev
# or
$ yarn add react-native-version --dev
Hook into the "version" or "postversion" npm script in your app's package.json:
{
"name": "AwesomeProject",
"version": "0.0.1",
"private": true,
"scripts": {
"start": "node node_modules/react-native/local-cli/cli.js start",
+ "postversion": "react-native-version"
},
// ...
}
Usage
Before you publish a new build of your app, run npm version <newversion>
.
react-native-version will then update your android/
and ios/
code. Depending on the script and options you choose, it can also automatically amend the version bump commit and update the Git tag created by npm version
. This method should be useful in most cases. If you need more control, take a look at the CLI and options below.
CLI
Setup
$ npm install -g react-native-version
# or
$ yarn global add react-native-version
Example usage
$ cd AwesomeProject/
$ npm version patch
$ react-native-version
Options
-h, --help output usage information
-V, --version output the version number
-a, --amend Amend the previous commit. Also updates the latest Git tag to point to the amended commit. This is done automatically when react-native-version is run from the "version" or "postversion" npm script. Use "--never-amend" if you never want to amend.
--skip-tag For use with "--amend", if you don't want to update Git tags. Use this option if you have git-tag-version set to false in your npm config or you use "--no-git-tag-version" during npm-version.
-A, --never-amend Never amend the previous commit.
-b, --increment-build Only increment build number.
-B, --never-increment-build Never increment build number.
-d, --android [path] Path to your "android/app/build.gradle" file.
-i, --ios [path] Path to your "ios/" folder.
-L, --legacy Version iOS using agvtool (macOS only). Requires Xcode Command Line Tools.
-q, --quiet Be quiet, only report errors.
-r, --reset-build Reset build number back to "1" (iOS only). Unlike Android's "versionCode", iOS doesn't require you to bump the "CFBundleVersion", as long as "CFBundleShortVersionString" changes. To make it consistent across platforms, react-native-version bumps both by default. You can use this option if you prefer to keep the build number value at "1" after every version change. If you then need to push another build under the same version, you can use "-bt ios" to increment.
-s, --set-build <number> Set a build number. WARNING: Watch out when setting high values. This option follows Android's app versioning specifics - the value has to be an integer and cannot be greater than 2100000000. You cannot decrement this value after publishing to Google Play! More info at: https://developer.android.com/studio/publish/versioning.html#appversioning
-t, --target <platforms> Only version specified platforms, eg. "--target android,ios".
You can apply these options to the "version" or "postversion" script too. If for example you want to commit the changes made by RNV yourself, add the "--never-amend" option:
{
// ...
"scripts": {
"postversion": "react-native-version --never-amend"
},
// ...
}
Targeting platforms
The default behaviour is to version all React Native platforms. You can target specific platforms by passing a comma-separated list to the "--target" option, or by using the RNV
environment variable:
$ RNV=android,ios npm version patch
# or
$ RNV=android,ios react-native-version
When using the CLI, you can even combine both methods and make your teammates rage :smiling_imp: :suspect::
$ RNV=android react-native-version --target ios
:rage1: :speak_no_evil:
API
import { version } from 'react-native-version';
async function doSomething() {
const versionResult = await version({
amend: true,
// ...
});
}
// or
version({
amend: true,
// ...
})
.then(commitHash => {
console.log(commitHash);
})
.catch(err => {
console.error(err);
});
Functions
- version(program, projectPath) ⇒
Promise.<(string|Error)>
Versions your app
Typedefs
- Promise
Custom type definition for Promises
version(program, projectPath) ⇒ Promise.<(string|Error)>
Versions your app
Kind: global function
Returns: Promise.<(string|Error)>
- A promise which resolves with the last commit hash
Param | Type | Description |
---|---|---|
program | Object |
commander/CLI-style options, camelCased |
projectPath | string |
Path to your React Native project |
Promise
Custom type definition for Promises
Kind: global typedef
Properties
Name | Type | Description |
---|---|---|
result | * |
See the implementing function for the resolve type and description |
result | Error |
Rejection error object |