如何将 YAML 通过管道传输到 Gulp 流中的 EJS



我正在使用gulp.js。我想将来自gulp-yaml的JSON数据直接传输到gulp-ejs中。我的逻辑说我可能必须在某个时候同步?

到目前为止,我尝试过:

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'));
});

好的,所以经过一番挠头,我已经能够使用 js-yaml 和 gulp-data 找到解决方案。

var yaml = require('js-yaml');
var ejs = require('gulp-ejs');
var data = require('gulp-data');
gulp.task('ejs-with-yaml', function(){
    return gulp.src('path/to/data.yml'))
        .pipe(data(function(file, cb){
            // throughput the stream in case of bad/absent file data
            if (file.isNull()) return cb( null, file );
            if (file.isStream()) return cb( new Error("Streaming not supported") );
            // try and convert yaml to json
            try {
                json = yaml.load(String(file.contents.toString('utf8')));
            } catch(e) {
                console.log(e);
            }
            gulp.src('path/to/template.ejs').pipe(ejs(json)).pipe(gulp.dest( 'path/to/dest' ));
        }));
});

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

相关内容

  • 没有找到相关文章

最新更新