将gulp-front-matter值传递给gulp-wrap

时间:2015-04-22 04:51:41

标签: gulp

我希望能做到这样的事情:

gulp.src('src/*.html')
  .pipe(fm ({
    property: 'fm'
  }))
  .pipe(wrap({
    src: fm['template']
  }))

其中template是前面的值。我可以创建一个单独的函数,我使用gulp-tap传递值,但我希望保留它 “简单”。我认为gulp-wrap不支持访问前面的变量。

2 个答案:

答案 0 :(得分:0)

这似乎是一种解决方案,但随着我添加更多复杂性,它开始失败,例如使用gulp-swig。

源文件包含:

---
template: full
---

Text content is here.

和脚本:

var frontMatter   = require('gulp-front-matter'),
    gulp          = require('gulp'),
    tap           = require('gulp-tap'),
    wrap          = require('gulp-wrap')

gulp.task('default', function() {
  gulp.src('src/*.html')
    .pipe(frontMatter())
    .pipe(tap(function(file) {
      gulp.src(file.path)
        .pipe(frontMatter ({
          remove: true
        }))
        .pipe(wrap({
          src: file.frontMatter['template'] + '.tpl' // ==> full.tpl
        }))
        .pipe(gulp.dest('build/'))
    }))
});

答案 1 :(得分:0)

您需要将函数作为gulp-wrap的第一个参数传递。

gulp-wrap的文件说

  

当一个函数然后调用该函数并且应该返回   模板内容。此函数首先获取数据对象   参数。

以下内容应该有效。

var gulp = require('gulp')
var fm = require('gulp-front-matter')
var wrap = require('gulp-wrap')

var fs = require('fs')

gulp.src('src/*.html')
  .pipe(fm({property: 'fm'}))
  .pipe(wrap(function (data) {
    return fs.readFileSync('path/to/layout_dir/' + data.file.fm.template + '.tpl').toString()
  }))
  .pipe(gulp.dest('build/'))

另见: Gulp Front Matter +Markdown through Nunjucks