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

Javascript 如何通过Gulp任务增加版本号?,javascript,angularjs,gulp,build-process,Javascript,Angularjs,Gulp,Build Process,我想用另一个字符串替换javascript文件中指示版本号的字符串(myConstantsFile.js)。例如,我的版本号是这样的:“01.11.15”,在myConstantsFile.js中用其他常量写成: .constant('productVersion', '1.11.15'); gulp.task('increment-version', function(){ //docString is the file from which you will get your c

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

.constant('productVersion', '1.11.15'); 
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/'));
});
现在,我的任务如下所示:

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; 
如您所见,我使用的是一个常量,而不是running,如下所示:

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; 
我需要:

  • 通过文件通过regex选择当前版本号的方法
  • 要知道我可以将逻辑放在最后一个代码块的何处,以增加数字并构建新字符串 安装

    安装

    需要吞咽通气

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

    我写了一些乱七八糟的东西,把我的常数写成了一个漂亮的字符串,但这就是要点,它是有效的。

    从过去的5个小时起,我就开始研究gulp,因为我有一个任务来修正这个要求。因此,作为一个明确的不可吞咽的对象,我给出了下面的代码,没有正则表达式。感谢@VSO和@Wilmer Saint的快速启动。也许只是一个小小的改变,但这对我很有帮助

    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
        });
    
    或者返回代码可以如下所示,以覆盖version.js文件中的数字

    return gulp.src(['app/scripts/version/version.js'],
                    {base: './app/scripts/version/version.js'})
            .pipe((gulp.dest('./app/scripts/version/version.js'))) 
    
    我的version.js只有以下代码

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


    您可以使用“大口通气”,它非常简单且甜蜜:)

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


    那大口喝呢?根据过去的经验,将构建编号保存在自己的文件中(在本例中,甚至可能是JSON)。当代码文件中的sed替换最终导致问题时,这几乎是不可能解决的。@cl3m看起来不错,我正在查看功能。我的主要问题是通过regex选择要使用的数据以及将变量/函数放在何处。这是我第一次用gulp做任何事情,除了运行浏览器同步之类的。这是个好主意,但问题是角常数需要从中提取。我们对grunt做了一个非常类似的事情。版本存储在package.json上,增量存储在grunt任务文件中。不知道这是怎么翻译成吞咽的。我要说的是,事实证明这有点脆弱,因为多个开发人员都可以在一个构建上执行增量,并且由于package.json(在我们的例子中)不受版本控制,它很容易失去同步。所以-要点是:版本控制您的版本号源。@Bosworth99注意到。这整件事都很痛苦,我们在构建过程中也会增加SQL中的版本号,但不是通过gulp,然后检查版本是否对齐,以查看更新后用户是否刷新了浏览器(以防API调用发生更改或其他情况)。我还没有找到一个合适的方法,但这完全是另一个问题。我很感谢你的回答,我投了赞成票,可能最终会接受并提出另一个问题,但我不想bump package.json,我想在不同的文件中更改字符串。也许我误解了大口喝的局限性。大口喝真是太棒了。期待任何事情。您可能想了解这一点:谢谢-是否有一些简单的方法可以将我的regex-/'productVersion','(.*)/g的结果放入一个var中,然后处理它?或者这最终会成为一个插件?这里有一个想法。既然package.json是您的,也许您可以让gulp replace使用package.json版本在其他地方更新您的字符串,并且仍然使用bump来控制您的版本。那不是很圆吗。这将意味着在通气任务中添加一个管道。这一点很好。请随意编辑并为帖子添加价值。我期待着看到你的结局。我认为没有必要
    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;
        }
    }
    
    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('./'));
      });
    
    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('./'));
    });