Создание нескольких файлов из винилового потока с помощью Through2

Я пытался понять это сам, но пока не добился успеха. Я даже не знаю, как начать исследовать это (хотя я уже пробовал некоторые поиски в Google, но безрезультатно), поэтому я решил задать этот вопрос здесь.

Можно ли вернуть несколько виниловых файлов из объектного потока Through2?

Мой пример использования таков: я получаю файл HTML через поток. Я хочу изолировать два разных раздела файлов (используя jQuery) и вернуть их в двух отдельных файлах HTML. Я могу сделать это с одним разделом (и одним результирующим HTML-файлом), но я абсолютно не представляю, как создать два разных файла.

Кто-нибудь может мне здесь помочь? Заранее спасибо.

1 ответ

Решение

Основной подход примерно такой:

  1. Создайте столько выходных файлов из вашего входного файла, сколько вам нужно, используя clone() функция.

  2. Изменить .contents Свойство каждого файла в зависимости от того, что вы хотите сделать. Не забывайте, что это буфер, а не строка.

  3. Изменить .path свойство каждого файла, чтобы ваши файлы не перезаписывали друг друга. Это абсолютный путь, поэтому используйте что-то вроде path.parse() а также path.join() сделать вещи проще.

  4. Вызов this.push() изнутри through2 Функция преобразования для каждого файла, который вы создали.

Вот быстрый пример, который разбивает файл test.txt в два одинаково больших файла test1.txt а также test2.txt:

var gulp = require('gulp');
var through = require('through2').obj;
var path = require('path');

gulp.task('default', function () {
  return gulp.src('test.txt')
    .pipe(through(function(file, enc, cb) {
       var c = file.contents.toString();
       var f = path.parse(file.path);
       var file1 = file.clone();
       var file2 = file.clone();
       file1.contents = new Buffer(c.substring(0, c.length / 2));
       file2.contents = new Buffer(c.substring(c.length / 2));
       file1.path = path.join(f.dir, f.name + '1' + f.ext);
       file2.path = path.join(f.dir, f.name + '2' + f.ext);
       this.push(file1);
       this.push(file2);
       cb();
    }))
    .pipe(gulp.dest('out'));
});
Другие вопросы по тегам