Как 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();
    });
};
Другие вопросы по тегам