Передача значения gulp-front-material в gulp-wrap

Я надеюсь сделать что-то вроде этого:

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

где template это значение во фронте. Я могу создать отдельную функцию, где я передаю значение, используя gulp-tap, но я надеялся, что оно будет "простым". Я не думаю gulp-wrap поддерживает доступ к передним материальным переменным.

2 ответа

Вам нужно передать функцию в качестве первого аргумента 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 + Уценка через Nunjucks

Кажется, это одно из решений, но оно начинает терпеть неудачу, когда я добавляю больше сложности, например, с 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/'))
    }))
});
Другие вопросы по тегам