将随机值传递给gulp管道模板
我有一个吞咽任务将随机值传递给gulp管道模板,gulp,Gulp,我有一个吞咽任务 gulp.task('markdown', function () { gulp.src('content/*.md') .pipe(newer('assembler/markdown_out')) .pipe(markdown()) .pipe(wrap({ src: 'assembler/markdowntemp/wrapper.html'})) .pipe(fileinclude({
gulp.task('markdown', function () {
gulp.src('content/*.md')
.pipe(newer('assembler/markdown_out'))
.pipe(markdown())
.pipe(wrap({ src: 'assembler/markdowntemp/wrapper.html'}))
.pipe(fileinclude({
prefix: '@@',
basepath: '@file'
}))
.pipe(template({classname: getClassName()}))
.pipe(gulp.dest('assembler/markdown_out'));
});
函数getClassName是
function getClassName(){
var classnames_size = ["big", "medium", "small", "extrabig"];
var classShape = ["tvscreen", "oval"];
return classnames_size[Math.floor(Math.random()*classnames_size.length)] + " " + classShape[Math.floor(Math.random()*classShape.length)];
}
不幸的是,当我运行这个任务时,模板看起来只编译了一次,而我想要的是为传入的每个文件编译模板,这样我就可以生成随机的类名
是否有一个选项可以将它设置为每次编译,或者有一个不同的插件可以做到这一点 您的方法的主要问题是gulp使用“glob并表示文件结构”(gulp官方文档) 这就是它的工作原理:它将获取流中的所有文件,处理它们,并将它们“连续”发送到下一个管道 这就是为什么函数getClassName只执行一次 为了实现您想要的,您必须考虑独立地操作每个文件,因此,您将失去“能力” 获得每个文件路径后,就可以在此文件上运行任务(现在是函数)。 该任务基本上将提取流中每个文件的路径,并调用functioncompileMarkdown,这是您的“旧”吞咽任务。现在,每个文件执行一次,因此,每个文件执行一次getClassName函数,从而生成“random类”(我没有深入研究该函数,我依赖于它工作正常的事实) 此示例使用以下插件:以便处理流中的每个文件 这是代码,希望对你有所帮助
var gulp = require('gulp'),
globToVinyl = require('glob-to-vinyl');
gulp.task('markdown', function() {
globToVinyl('content/*.md', function(err, files){
for (var file in files) {
compileMarkdown(files[file].path);
}
});
});
function compileMarkdown(file) {
gulp.src('file')
.pipe(newer('assembler/markdown_out'))
.pipe(markdown())
.pipe(wrap({ src: 'assembler/markdowntemp/wrapper.html'}))
.pipe(fileinclude({
prefix: '@@',
basepath: '@file'
}))
.pipe(template({classname: getClassName()}))
.pipe(gulp.dest('assembler/markdown_out'));
}
function getClassName(){
var classnames_size = ["big", "medium", "small", "extrabig"];
var classShape = ["tvscreen", "oval"];
return classnames_size[Math.floor(Math.random()*classnames_size.length)] + " " + classShape[Math.floor(Math.random()*classShape.length)];
}