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



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

.constant('productVersion', '1.11.15'); 

现在,我的任务是这样的:

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

正如你所看到的,我使用的是一个常量,而不是运行增量代码,它看起来像这样:

    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; 

我需要:

  1. 一种通过regex通过文件选择当前版本号的方法
  2. 为了知道我可以把逻辑放在最后一个代码块的哪里,以增加数字并构建新的字符串

安装gullow-bump

npm install gulp-bump --save-dev

安装码

npm install yargs --save-dev

需要吞咽冲击

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

需要码数

var args = require('yargs').argv;

您的通气任务

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'));
});

VSO注意:我相信很多人来到这个线程会寻找上面的答案。下面的代码是编辑存储在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/'));
});

我犯了一些胡言乱语,把我的常数写在一个漂亮的字符串中,但这就是要点,它很管用。

从过去的5个小时开始研究gullow,因为我有一项任务要解决这个需求。因此,我得出了下面的代码,它是,没有正则表达式。感谢@VSO@威尔默圣的快速入门。可能是一个微小的变化,但这对我有帮助。

gulp.task('version', function(){
  var fs = require('fs');
    //docString is the file from which you will get your constant string
    var docString = fs.readFileSync('app/scripts/version/version.js', 'utf8'); //type of docString i an object here.
    var versionParts = docString.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;

    require('fs').writeFileSync('app/scripts/version/version.js', newVersionNumber + "'");
        return gulp.src(['app/scripts/version/version.js'])
            .pipe(gulp.dest('app/scripts/version/new_version'));//creates version.js file in the directory
    });

或者返回代码可以如下所示来覆盖.js版本文件中的数字

return gulp.src(['app/scripts/version/version.js'],
                {base: './app/scripts/version/version.js'})
        .pipe((gulp.dest('./app/scripts/version/version.js'))) 

我的.js版本只有以下代码

versionBuild = '1.0.8'

我在我的主要功能中使用了以下内容(加载应用程序时加载)

var versionBuild=parseInt(1000*Math.random());
var random = function(digs){
    var rndn;
    if(window.location.hostname === "localhost" || window.location.hostname === "127.0.0.1") {
        rndn = Math.random();
        if(digs != undefined && !isNaN(digs)){
              rndn =  parseInt(Math.pow(10, digs)*rndn)
              }
              return rndn;
    }
    else {
        return versionBuild;
    }
}

你可以使用gullow-bump,它非常简单和甜蜜:)

npm install --save gulp-bump
const bump = require('gulp-bump');
gulp.task('bump', async () => {
    gulp.src('./package.json')
    .pipe(bump({key: "version"}))
    .pipe(gulp.dest('./'));
  });

注意:在函数之前使用async。这是一项要求。

gulp.task('bump', function() {
    var vers = JSON.parse(fs.readFileSync(__dirname + '/package.json')).version.split('.');
    var second = parseInt(vers[1]);
    var third  = parseInt(vers[2]);
    var options = { key: 'version' };
    if(third == 9 && second != 9) {
        third = 0;
        options.type = 'minor';
    } else if (second == 9 && third == 9) {
        second = 0;
        options.type = 'major';
    }
    gulp.src(__dirname + '/package.json')
    .pipe(bump(options))
    .pipe(gulp.dest('./'));
});

最新更新