Передача значения 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/'))
}))
});