如何将 YAML 通过管道传输到 Gulp 流中的 EJS?
How to pipe YAML into EJS in a Gulp stream?
我正在使用 gulp.js. I want to pipe the resulting JSON data from gulp-yaml, straight into 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-data 将与解决方案有关...
好的,经过一番摸索之后,我找到了使用 js-yaml and 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' ));
}));
});
希望这可以帮助其他陷入困境的人。如果大家有更好的解决方案,欢迎留言评论。
您可能不需要 gulp-data 插件来实现此目的;就像你说的那样,你只是将选项同步传递给 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'));
});
我正在使用 gulp.js. I want to pipe the resulting JSON data from gulp-yaml, straight into 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-data 将与解决方案有关...
好的,经过一番摸索之后,我找到了使用 js-yaml and 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' ));
}));
});
希望这可以帮助其他陷入困境的人。如果大家有更好的解决方案,欢迎留言评论。
您可能不需要 gulp-data 插件来实现此目的;就像你说的那样,你只是将选项同步传递给 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'));
});