Mastering PhoneGap Mobile Application Development
上QQ阅读APP看书,第一时间看更新

Managing version numbers

Although we've set up our copy-config and copy-code tasks to substitute the version number whenever {{{VERSION}}} is encountered, we don't have any tasks that actually change the version. We could just edit package.json, of course. But this is tedious and it can't be included automatically in any other Gulp task. Instead, let's use the gulp-bump plugin to take care of this for us.

gulp-bump is a very simple plugin: it is designed to take a package.json (or similar) file and edit the version property based on specific commands. Most versions are of the major.minor.patch form and we can ask it to increment any portion by one. If you wanted, you could increment the patch portion of the version to automatically track build numbers, for example.

Doing this is pretty simple. Let's first create another utility file, this time called gulp/utils/bump.js:

var gulp = require("gulp");
var bump = require("gulp-bump");

module.exports = function bump(importance) {
  return gulp.src([path.join(process.cwd(), "package.json")])
             .pipe(bump({type: importance}))
             .pipe(gulp.dest(process.cwd()));
}

The importance variable can be one of the following strings: major, minor, or patch. Next, let's create three tasks that will allow us to call this method directly (again, these are in three separate files, indicated in the comment):

// gulp/tasks/version-bump-patch.js
var bump = require("../utils/bump");
module.exports = {
    task: bump.bind(null, "patch")
}

// gulp/tasks/version-bump-minor.js
var bump = require("../utils/bump");
module.exports = {
    task: bump.bind(null, "minor")
}

// gulp/tasks/version-bump-major.js
var bump = require("../utils/bump");
module.exports = {
    task: bump.bind(null, "major")
}

Now you can directly bump the version number by executing gulp version-bump-patch. This, however, only edits package.json. If you want the files in build/ to reflect this, you will need to also execute gulp copy (or build and so on).