Gulp控制输出基于早期管道

时间:2016-11-04 02:18:13

标签: gulp gulp-if gulp-tap

我一直试图找到一种方法,只能根据我在管道中收集的yaml数据写出某些文件。我已经能够看到文件的数据,但无法获得我期望的输出。

在这个任务中,我正在收集一系列markdown文件,并将它们传递到使用gulp-data读取yaml的管道中,然后向其中添加一些其他数据。然后我通过Swig管道。

我尝试在插入gulp.dest之前添加某种条件元素。我发现这个example让我到了目前的位置。

我最接近的是:

  .pipe(tap(function(file) {
    if (new Date(file.data.date) >= new Date(buildRange)) {
      console.log(file.path);
      gulp.src(file.path)
        .pipe(gulp.dest(config.paths.dest + '/underreview/'));
    }
  }))

我从console.log命令获得的内容是正确的(它显示了50个文件中的2个)。但没有任何东西写到目的地。如果我将gulp.dest移到此管道之外,则会写入所有文件。

我尝试过使用gulp-if或gulp-ignore,但无法将file.data.date放入其中任何一个模块中。

编辑:这是完成的任务

module.exports = function(gulp, config, env) {


var gulpSwig = require('gulp-swig'),
    swig = require('swig'),
    data = require('gulp-data'),
    matter = require('gray-matter'),
    runSequence = require('run-sequence'),
    // BrowserSync
    reload = config.browserSync.reload,
    _ = require('lodash'),
    Path = require('path'),
    requireDir = require('require-dir'),
    marked = require('marked'),
    readingTime = require('reading-time'),
    postsData = [],
    postsTags = [],
    pdate = null,
    buildRange = new Date(new Date().setDate(new Date().getDate()-14));
    sitebuilddate = null,
    through = require('through2'),
    gutil = require('gulp-util'),
    rename = require('gulp-rename'),
    File = require('vinyl'),
    $if = require('gulp-if'),
    ignore = require('gulp-ignore'),
    tap = require('gulp-tap');

  var opts = {
    defaults: {
      cache: false
    },
    setup: function(Swig) {
      Swig.setDefaults({
        loader: Swig.loaders.fs(config.paths.source + '/templates')});
    }
  };

  // Full of the compiled HTML file
  function targetPathFull(path, data) {
    return Path.join(Path.dirname(path), targetPath(data));
  }

gulp.task('templates2:under', function() {
    return gulp.src(config.paths.source + '/content/**/*.md')
      .pipe(data(function(file) {
        postData = [];
        var matterObject = matter(String(file.contents)), // extract front matter data
          type = matterObject.data.type, // page type
          body = matterObject.content,
          postData = matterObject.data,
          moreData = requireDir(config.paths.data),
          data = {},
          bodySwig;

        bodySwig = swig.compile(body, opts);
        // Use swig to render partials first
        body = bodySwig(data);
        // Process markdown
        if (Path.extname(file.path) === '.md') {
          body = marked(body);
        }
        // Inherit the correct template based on type
        if (type) {
          var compiled = _.template(
            "{% extends 'pages/${type}.html' %}{% block body %}${body}{% endblock %}"
            // Always use longform until a different template for different types is needed
            //"{% extends 'pages/longform.html' %}{% block body %}${body}{% endblock %}"
          );
          body = compiled({
            "type": type,
            "body": body
          });
        }

        file.path = targetPathFull(file.path, postData);
        moreData.path = targetPath(postData);
        _.merge(data, postData, moreData);

        data.url = data.site.domain + "/" + data.slug;
        // Copy the processed body text back into the file object so Gulp can keep piping
        file.contents = new Buffer(body);

        return data;
      }))
      .pipe(gulpSwig(opts))
      .pipe(tap(function(file) {
        if (new Date(file.data.date) >= new Date(buildRange)) {
          console.log(file.path);
          gulp.src(file.path)
            .pipe(gulp.dest(config.paths.dest + '/underreview/'));
        }
      }))
      .pipe(gulp.dest(config.paths.dest + '/underreview/'));  
  });
}

1 个答案:

答案 0 :(得分:0)

所以,可能不是最好的解决方案,但经过一些重新考虑后,我想出了这个:

.pipe(gulp.dest(config.paths.dest + '/underreview/'))
      .pipe(tap(function(file) {
        if (new Date(file.data.date) < new Date(buildRange)) {
          console.log(file.data.path);
          del(config.paths.dest + '/underreview/' + file.data.path)
        }
      }))  

我在输出后移动了gulp-tap,然后我删除了刚写的文件。