我希望能做到这样的事情:
gulp.src('src/*.html')
.pipe(fm ({
property: 'fm'
}))
.pipe(wrap({
src: fm['template']
}))
其中template
是前面的值。我可以创建一个单独的函数,我使用gulp-tap传递值,但我希望保留它
“简单”。我认为gulp-wrap
不支持访问前面的变量。
答案 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/'))