我试图在我的package.json文件中插入版本号,然后使用更新版本号创建一个新的git标记。每当我运行bump任务时,创建的git标记都是旧版本号的,而不是颠簸的。
我使用gulp-load-plugins注册所有插件并将它们映射到$,而不是手动声明它们。所以,我不使用var bump = require("gulp"); ... bump(),而是使用$.bump()。
尝试#1
我的初始代码是这样的。
var gulp = require("gulp");
var $ = require('gulp-load-plugins')();
gulp.task('bump', function() {
gulp.src(['package.json'])
.pipe($.bump())
.pipe(gulp.dest('./'));
var config = require('./package.json');
$.git.tag('v' + config.version, 'Version message');
$.util.log("tag added: " + config.version);
});尝试#2
一些谷歌用户认为这似乎是异步和同步的问题,所以在阅读了这博客文章之后,我创建了两个任务来测试这个问题。
tag依赖于bump完成,最大的更改是bump任务中的返回语句。日志输出显示它们按顺序执行,但问题仍然存在。
var gulp = require("gulp");
var $ = require('gulp-load-plugins')();
gulp.task('bump', function() {
return gulp.src(['package.json'])
.pipe($.bump())
.pipe(gulp.dest('./'));
});
gulp.task('tag',['bump'], function() {
var config = require('./package.json');
$.git.tag('v' + config.version, 'Version message');
$.util.log("tag added: " + config.version);
});尝试#3
我还尝试将git标记逻辑从bump中移到.on('close')事件中,但这也解决不了我的问题。
var gulp = require("gulp");
var $ = require('gulp-load-plugins')();
gulp.task('bump', function() {
return gulp.src(['package.json'])
.pipe($.bump())
.pipe(gulp.dest('./'))
.on('close', function () {
var config = require('./package.json');
$.git.tag('v' + config.version, 'Version message');
$.util.log("tag added: " + config.version);
});
});尝试#4
此外,还尝试了损坏-Deutz建议不要使用require('package.json'),因为require可能会缓存结果。我尝试使用节点文件系统的readFile()方法,但也没有成功。
var gulp = require("gulp");
var $ = require('gulp-load-plugins')();
var fs = require('fs');
gulp.task('bump', function() {
gulp.src(['package.json'])
.pipe($.bump())
.pipe(gulp.dest('./'));
fs.readFile("./package.json", {encoding: 'utf-8'}, function (err, data) {
var config = JSON.parse(data);
$.git.tag('v' + config.version, 'Version message');
$.util.log("tag added: " + config.version);
});
});知道问题出在哪里了吗?这仍然是异步和同步的问题,我做错了什么吗?我更希望在一项任务中有逻辑,但如果他们只有两种方式来完成这一任务,那么就这样吧。
我刚开始吞咽和溪流的运作方式,所以如果我的标题没有意义的话,请告诉我。我想要更新它,以便它更相关的搜索结果。
提前谢谢。
发布于 2014-03-02 21:12:22
你很可能被要求使用缓存.
您的require('package.json')调用可能会在bump()操作之前返回(缓存)版本。你应该试着直接读(例如:避免要求)。
更新
如下所示,按预期执行工作--正如上面所建议的:
var gulp = require("gulp");
var $ = require('gulp-load-plugins')();
var fs = require('fs');
gulp.task('bump', function() {
return gulp.src(['package.json'])
.pipe($.bump())
.pipe(gulp.dest('./'));
});
gulp.task('tag', ['bump'], function() {
// This doesn't work, because require uses caching
// var config = require('./package.json');
var config = fs.readFileSync('./package.json', 'utf-8');
console.warn(config);
});发布于 2014-03-03 01:31:30
我通过使用吞咽器插件找到了一个解决方案,它允许您访问管道流并读取/修改它。虽然这样做是我想做的,但我仍然想知道是否有一种非插件的方法来实现这一点,或者我的其他尝试有什么问题。
var gulp = require("gulp");
var $ = require('gulp-load-plugins')();
gulp.task('bump', function() {
gulp.src(['package.json'])
.pipe($.bump())
.pipe($.tap( function (file, t) {
var config = JSON.parse(file.contents.toString());
$.git.tag('v' + config.version, 'Version message');
$.util.log("new tag " + config.version);
}))
.pipe(gulp.dest('./'));
});https://stackoverflow.com/questions/22123958
复制相似问题