Gulp: доступ к добавленным свойствам винила - PullRequest
0 голосов
/ 22 октября 2018

Как получить доступ к свойствам, добавленным к объекту винилового файла Gulp, когда я передаю потоки?

Если я задаю неправильный вопрос, вот мои рассуждения.

Я использую Gulp 4 и хочу извлечь данные yaml из верхней части файла, используя gulp-front-material , и далее вниз по потоку отправить их в пакет HTML-шаблонов, такой как pug.Согласно документации gfm ...

"Извлечь заголовок YAML Front-Matter из файлов, удалить его из contents и добавить новое свойство frontMatter к объекту файла."

Я узнал, что Gulp использует объекты виниловых файлов , которые имеют свойство options.contents и могут иметь любые добавленные свойства options.{custom}.Как мне, по крайней мере, получить доступ к объекту винилового файла, чтобы в конечном итоге передать добавленное свойство frontMatter в pug?

Моя лучшая попытка заключается в следующем ...

return src('file.md')
    .pipe(frontMatter())
    .pipe(gulpPug({ /* vinyl.options.frontMatter */ }));

Редактировать: На данный момент,Я пытаюсь написать свой собственный поток преобразования, который получит доступ к пользовательскому свойству винилового объекта и перенаправит его в gulp-pug .

1 Ответ

0 голосов
/ 22 октября 2018

Я сделал это.

Принимая во внимание исходный поток, который заканчивался отправкой измененных объектов винилового файла gulp-front-material, я смог получить доступ к новым свойствам yaml, прикрепив свой собственный поток преобразования, который читаетвходящий виниловый объект.Пример, который я включил, отсутствует в любой реализации задачи Gulp 4, он работает, просто запустив node index.js.

const { Transform } = require('stream');
const { src, dest } = require('gulp');
const Vinyl = require('vinyl');
const frontMatter = require('gulp-front-matter');
const streamToArray = require('stream-to-array');    

function fmData() { 
    return (
        new Transform({
            readableObjectMode: true,
            writableObjectMode: true,
            transform(chunk, encoding, callback) {
                if (Vinyl.isVinyl(chunk)) {
                    this.push(chunk.frontMatter);
                }
                callback();
            }
        })
    )
}

streamToArray(
    src('file.md')
        .pipe(frontMatter())
        .pipe(fmData())
).then(array => {
    console.log(array);
});

. Включены зависимости в стиле npm package.json.

"dependencies": {
    "gulp": "^4.0.0",
    "gulp-front-matter": "^1.3.0",
    "stream-to-array": "^2.3.0",
    "vinyl": "^2.2.0"
  }

По правде говоря, объект винилового файла ожидает чтения, хотя для этого требуется, чтобы он был выполнен в поточном конвейере.Я наблюдал за выступлением 2013 в MNUG , читал бесплатное учебное пособие по кодам и просматривал документацию потока узлов , чтобы завершить это.

...