Javascript 如何通过Gulp任务增加版本号?
我想用另一个字符串替换javascript文件中指示版本号的字符串(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
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;
我需要:
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('./'));
});