gulp stream完成后无法获取文件的更新内容

 lucia_8899_458 发布于 2023-01-20 15:15

我试图在我的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
有些谷歌搜索似乎是一个异步vs同步问题,所以在阅读这篇博文之后,我创建了两个任务来测试它.

tag依赖于bump完成,大变化是在bump任务中的return语句.日志输出显示它们按顺序执行,但问题仍然存在.

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

那么问题出在哪里呢?它仍然是异步vs同步问题,我做错了吗?我更喜欢只在一个任务中使用逻辑,但如果他们只有两个方法来实现这一点,那就这样吧.

我是新来的吞咽和流如何工作,所以如果我的标题没有意义让我知道.我想更新它,以便它与搜索结果更相关.

提前致谢.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有