Как увеличить номер версии с помощью Gulp Task?
Я хотел бы заменить строку, указывающую номер версии в файле 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;
Я нуждаюсь:
- Способ выбрать текущий номер версии через регулярное выражение через файл.
- Чтобы узнать, где я могу поместить логику в последний блок кода, чтобы увеличить число и построить новую строку.
2 ответа
Установить гул-бамп
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/'));
});
Я пропустил какое-то mumbo-jumbo, которое записывает мою константу в красивую строку, но это суть, и она работает.
Начал изучать глоток с последних 5 часов, так как у меня была задача исправить требование. Таким образом, будучи определенным новичком, чтобы глотать, я вышел с кодом ниже, без выражения регулярного выражения. Спасибо @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'
Я использовал ниже в моей основной функции (загружается при загрузке приложения)
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;
}
}
Можно использовать gulp-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('./'));
});