Stream 如何通过管道将YAML输送到吞咽流中的EJS?

Stream 如何通过管道将YAML输送到吞咽流中的EJS?,stream,yaml,gulp,ejs,Stream,Yaml,Gulp,Ejs,我正在使用。我想通过管道将生成的JSON数据直接导入。我的逻辑是,我可能需要在某个时刻实现同步 到目前为止,我所尝试的: var yaml = require('gulp-yaml'); var ejs = require('gulp-ejs'); gulp.task('yaml', function(){ return gulp.src('./path/to/template.ejs') .pipe( ejs( gulp.src('./path/to/data.ym

我正在使用。我想通过管道将生成的JSON数据直接导入。我的逻辑是,我可能需要在某个时刻实现同步

到目前为止,我所尝试的:

var yaml = require('gulp-yaml');
var ejs = require('gulp-ejs');

gulp.task('yaml', function(){

    return gulp.src('./path/to/template.ejs')
        .pipe( ejs( gulp.src('./path/to/data.yml').pipe( yaml() ) ) )
        .pipe(gulp.dest('./path/to/dest'));

});
我意识到上面的脚本很愚蠢,因为我实际上是在试图将流作为参数传递给
ejs
。正如预测的那样,它不起作用。我尝试过很多其他的方法,但我猜以前有人做过


我认为这与解决方案有关…

好的,所以经过一番努力,我已经能够使用和找到一个解决方案


希望这能帮助其他陷入困境的人。如果有人有更好的解决方案,请随意评论。

您可能不需要gulp数据插件来实现这一点;正如您所说,您只是将该选项同步传递给ejs插件,并且只需要一个yaml配置文件。所以这可能更好:

var yaml = require('js-yaml');
var ejs = require('gulp-ejs');
var fs = require('fs');

gulp.task('ejs-with-yaml', function () {
    return gulp.src('path/to/template.ejs')
        .pipe(ejs(yaml.safeLoad(fs.readFileSync('path/to/data.yml', 'utf-8'))))
        .pipe(gulp.dest('path/to/dest'));
});

更新了Ben在it is simpler/cleaner的正确答案。为了进行投票,我如何处理此处不存在的yml文件的错误?我不确定“处理”此错误的最佳方法,因为如果没有找到YAML数据,这不是一项可以继续进行的任务
fs.readFileSync
如果文件不存在,只会抛出
enoint
,从那里你知道你的数据不存在,你可以纠正这个问题。
var yaml = require('js-yaml');
var ejs = require('gulp-ejs');
var fs = require('fs');

gulp.task('ejs-with-yaml', function () {
    return gulp.src('path/to/template.ejs')
        .pipe(ejs(yaml.safeLoad(fs.readFileSync('path/to/data.yml', 'utf-8'))))
        .pipe(gulp.dest('path/to/dest'));
});