Как process.stdin может быть использован в качестве отправной точки для задания gulp?
Я использую gulp для преобразования SCSS в код CSS с помощью плагина gulp-sass. Это все работает нормально, но я также хочу использовать gulp для получения ввода (код SCSS) из канала Unix (т.е. чтения process.stdin
) и потреблять это и передавать поток в process.stdout
,
Из чтения вокруг process.stdin
это ReadableStream
а также vinyl
кажется, что это может обернуть stdin
и затем использовать его в глотке, например
gulp.task('stdin-sass', function () {
process.stdin.setEncoding('utf8');
var file = new File({contents: process.stdin, path: './test.scss'});
file.pipe(convert_sass_to_css())
.pipe(gulp.dest('.'));
});
Однако, когда я делаю это, я получаю ошибку:
TypeError: file.isNull is not a function
Это заставляет меня думать, что stdin
является чем-то особенным, но официальная документация для node.js утверждает, что это правда ReadableStream
,
1 ответ
Так что я получил это на работу путем обработки process.stdin
и писать в process.stdout
:
var buffer = require('vinyl-buffer');
var source = require('vinyl-source-stream');
var through = require('through2');
gulp.task('stdio-sass', function () {
process.stdin.setEncoding('utf8');
process.stdin.pipe(source('input.scss'))
.pipe(buffer())
.pipe(convert_sass_to_css())
.pipe(stdout_stream());
});
var stdout_stream = function () {
process.stdout.setEncoding('utf8');
return through.obj(function (file, enc, complete) {
process.stdout.write(file.contents.toString());
this.push(file);
complete();
});
};