我试图在我的 package.json 文件中增加版本号,然后使用更新版本号来创建一个新的 git 标签。每当我运行碰撞任务时,创建的 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
完成,最大的变化是凹凸任务中的返回语句。日志输出显示它们正在按顺序执行,但问题仍然存在。
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 标签逻辑从凹凸移动到 .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
还尝试了不使用Mangled-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);
});
});
那么知道问题出在哪里吗?它仍然是异步与同步问题,我做错了什么吗?我宁愿只在一项任务中拥有逻辑,但如果他们完成这项任务的唯一方法是两个,那就这样吧。
我是 gulp 和流如何工作的新手,所以如果我的标题没有意义,请告诉我。我想更新它,使其与搜索结果更相关。
提前致谢。