2016-03-31 2 views
13

Я хотел бы заменить строку, указывающую номер версии в файле javascript (myConstantsFile.js), с другой строкой. Так, например, мой номер версии выглядит следующим образом: «01.11.15», написанный, как это в myConstantsFile.js с другими константами:Как увеличить номер версии с помощью задачи Gulp?

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

Как вы можете видеть, я использую константу, не работает incrementation code, который будет выглядеть следующим образом:

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. Способ выбора текущего номера версии с помощью регулярного выражения через файл.
  2. Чтобы узнать, где я могу поместить логику в последний блок кода, чтобы увеличить число и построить новую строку.
+1

насчет Глоток-шишка? https://www.npmjs.com/package/gulp-bump – cl3m

+0

Из прошлого опыта сохраните свой номер сборки в собственном файле (в данном случае, возможно, даже JSON). Когда замена sed в файле кода в конечном итоге вызовет проблему, будет почти невозможно понять. – ssube

+0

@ cl3m Выглядит хорошо, я просматриваю функциональность. Мои главные проблемы - это основной выбор данных с помощью регулярных выражений для работы и размещения моих варов/функций. Это мой первый раз, когда я делаю что-нибудь с gulp, кроме запуска синхронизации браузера и т. Д. ssube - это хорошая идея, но проблема в том, что угловые константы должны вытащить из нее. – VSO

ответ

18

Установка gulp-bump

npm install gulp-bump --save-dev 

Установка yargs

npm install yargs --save-dev 

Require проглатывать-врезаться

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

Require yargs

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 Примечание: Я считаю, что очень много людей, приходящих на эту тему будет искать именно для ответа выше. Код ниже, чтобы изменить номер версии, хранящийся где-то КРОМЕ файлы пакет НМПА/Бауэр, например, в угловых константах:

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

I пропущены некоторый фетиш, который записывает свою константу в довольно строке, но это и он работает.

+1

Я очень благодарен за ответ, и его, скорее всего, в конечном итоге примут и зададут другой вопрос, но я не ищу bump package.json. Я хочу изменить строку в другом файле. Может быть, я неправильно понимаю ограничения глотков. – VSO

+0

Gulp является довольно удивительным. Ожидайте чего-нибудь. Вы можете посмотреть на это: http://stackoverflow.com/a/36335869/4775223 –

+0

Спасибо - есть ли простой способ получить результат моего регулярного выражения -/'productVersion', '(. *)'/G в var, а затем работать над ним? Или это в конечном итоге является плагином? – VSO

1

Начал изучать глоток с прошлых 5 часов, так как у меня была задача исправить это требование. Таким образом, будучи определенным noob для 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'))) 

Моя версия.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; 
    } 
} 
Смежные вопросы