如何通过Gulp任务增加版本号?

VSO*_*VSO 18 javascript build-process angularjs gulp

我想myConstantsFile.js用另一个字符串替换javascript文件()中指示版本号的字符串.因此,例如,我的版本号看起来像这样:"01.11.15",myConstantsFile.js 与其他常量一样写成:

.constant('productVersion', '1.11.15'); 
Run Code Online (Sandbox Code Playgroud)

现在,我的任务看起来像这样:

gulp.task('increment-version', function(){
    gulp.src(['./somedir/myConstantsFile.js'])
        .pipe(replace(/'productVersion', '(.*)'/g, '99.99.99'))
        .pipe(gulp.dest('./somedir/'));
});
Run Code Online (Sandbox Code Playgroud)

如您所见,我使用的是常量,而不是运行的增量代码,如下所示:

    var numberString = '0.0.1';
    var versionParts = numberString.split('.');
    var vArray = {
      vMajor : versionParts[0],
      vMinor : versionParts[1],
      vPatch : versionParts[2]
    } 

    vArray.vPatch = parseFloat(vArray.vPatch) + 1;
    var periodString = ".";

    var newVersionNumberString = vArray.vMajor + periodString + 
                                vArray.vMinor+ periodString + 
                                vArray.vPatch; 
Run Code Online (Sandbox Code Playgroud)

我需要:

  1. 一种通过文件通过正则表达式选择当前版本号的方法.
  2. 要知道我可以将逻辑放在最后一个代码块中以增加数字并构建新字符串.

Wil*_* SH 25

安装gulp-bump

npm install gulp-bump --save-dev
Run Code Online (Sandbox Code Playgroud)

安装yargs

npm install yargs --save-dev
Run Code Online (Sandbox Code Playgroud)

需要gulp-bump

var bump = require('gulp-bump');
Run Code Online (Sandbox Code Playgroud)

要求yargs

var args = require('yargs').argv;
Run Code Online (Sandbox Code Playgroud)

你的碰撞任务

gulp.task('bump', function () {
    /// <summary>
    /// It bumps revisions
    /// Usage:
    /// 1. gulp bump : bumps the package.json and bower.json to the next minor revision.
    ///   i.e. from 0.1.1 to 0.1.2
    /// 2. gulp bump --version 1.1.1 : bumps/sets the package.json and bower.json to the 
    ///    specified revision.
    /// 3. gulp bump --type major       : bumps 1.0.0 
    ///    gulp bump --type minor       : bumps 0.1.0
    ///    gulp bump --type patch       : bumps 0.0.2
    ///    gulp bump --type prerelease  : bumps 0.0.1-2
    /// </summary>

    var type = args.type;
    var version = args.version;
    var options = {};
    if (version) {
        options.version = version;
        msg += ' to ' + version;
    } else {
        options.type = type;
        msg += ' for a ' + type;
    }


    return gulp
        .src(['Path to your package.json', 'path to your bower.json'])
        .pipe(bump(options))
        .pipe(gulp.dest('path to your root directory'));
});
Run Code Online (Sandbox Code Playgroud)

VSO注意:我相信很多人来到这个主题将会完全找到上面的答案.下面的代码是编辑存储在某处的版本号BESIDES npm/bower包文件,例如角度常量:

gulp.task('increment-version', function(){
    //docString is the file from which you will get your constant string
    var docString = fs.readFileSync('./someFolder/constants.js', 'utf8');

    //The code below gets your semantic v# from docString
    var versionNumPattern=/'someTextPreceedingVNumber', '(.*)'/; //This is just a regEx with a capture group for version number
    var vNumRexEx = new RegExp(versionNumPattern);
    var oldVersionNumber = (vNumRexEx.exec(docString))[1]; //This gets the captured group

    //...Split the version number string into elements so you can bump the one you want
    var versionParts = oldVersionNumber.split('.');
    var vArray = {
        vMajor : versionParts[0],
        vMinor : versionParts[1],
        vPatch : versionParts[2]
    };

    vArray.vPatch = parseFloat(vArray.vPatch) + 1;
    var periodString = ".";

    var newVersionNumber = vArray.vMajor + periodString +
                           vArray.vMinor+ periodString +
                           vArray.vPatch;

    gulp.src(['./someFolder/constants.js'])
        .pipe(replace(/'someTextPreceedingVNumber', '(.*)'/g, newVersionNumber))
        .pipe(gulp.dest('./someFolder/'));
});
Run Code Online (Sandbox Code Playgroud)

我省略了一些mumbo-jumbo,它将我的常量写在一个漂亮的字符串中,但这就是要点而且它有效.