首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在吞咽流完成后无法获得更新的文件内容

在吞咽流完成后无法获得更新的文件内容
EN

Stack Overflow用户
提问于 2014-03-02 04:41:53
回答 2查看 2.8K关注 0票数 3

我试图在我的package.json文件中插入版本号,然后使用更新版本号创建一个新的git标记。每当我运行bump任务时,创建的git标记都是旧版本号的,而不是颠簸的。

我使用gulp-load-plugins注册所有插件并将它们映射到$,而不是手动声明它们。所以,我不使用var bump = require("gulp"); ... bump(),而是使用$.bump()

尝试#1

我的初始代码是这样的。

代码语言:javascript
复制
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任务中的返回语句。日志输出显示它们按顺序执行,但问题仍然存在。

代码语言:javascript
复制
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')事件中,但这也解决不了我的问题。

代码语言:javascript
复制
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()方法,但也没有成功。

代码语言:javascript
复制
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);
  });
});

知道问题出在哪里了吗?这仍然是异步和同步的问题,我做错了什么吗?我更希望在一项任务中有逻辑,但如果他们只有两种方式来完成这一任务,那么就这样吧。

我刚开始吞咽和溪流的运作方式,所以如果我的标题没有意义的话,请告诉我。我想要更新它,以便它更相关的搜索结果。

提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-02 21:12:22

你很可能被要求使用缓存.

您的require('package.json')调用可能会在bump()操作之前返回(缓存)版本。你应该试着直接读(例如:避免要求)。

更新

如下所示,按预期执行工作--正如上面所建议的:

代码语言:javascript
复制
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);
});
票数 5
EN

Stack Overflow用户

发布于 2014-03-03 01:31:30

我通过使用吞咽器插件找到了一个解决方案,它允许您访问管道流并读取/修改它。虽然这样做是我想做的,但我仍然想知道是否有一种非插件的方法来实现这一点,或者我的其他尝试有什么问题。

代码语言:javascript
复制
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('./'));
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22123958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档