Как использовать список объектов в качестве исходного потока gulp

Я знаю, что для правильной работы gulp требуется поток исходного винила, но есть ли простой способ использовать уже существующий виниловый файл или объект json вместо хорошо известного gulp.src, который принимает только глобусы?

2 ответа

Решение

После нескольких исследований я не нашел хорошего решения этой проблемы, поэтому решил поделиться своим решением с вами.

Эта проблема решается в 2 этапа

1: Вам нужно преобразовать все, что вы хотите передать в gulp, в виниловый файл. Это можно сделать так

const Vinyl = require('vinyl');
var vinyl = new Vinyl();
vinyl.cwd = '/';
vinyl.base = '/';
vinyl.path = '/yourfictivefilepath';
vinyl.contents = new Buffer(JSON.stringify(yourobject));

Для получения дополнительной информации об этом шаге: https://github.com/gulpjs/vinyl

2: создать поток из ваших виниловых файлов

Я обнаружил, что эти шаги могут быть повторяющимися и могут сделать код менее читабельным, поэтому я решил заключить эти шаги в пакет npm, который сделает это за вас.

https://www.npmjs.com/package/gulp-to-stream

Так как Gulp использует виниловые файлы в качестве входных данных и фактически использует некоторые из его свойств (таких как .base), неизбежно создавать виниловые файлы, чтобы использовать глоток. Поэтому я рекомендую этот доступ для достижения вашей цели:

'use strict';
const gulp = require('gulp');
const header = require('gulp-header');//https://www.npmjs.com/package/gulp-header

gulp.task('default', function () {
    gulp.src("a.json")//empty file
        .pipe(header(JSON.stringify({a:1,b:2})))//inject your own content
        .pipe(gulp.dest("dist/"))
});

Создать пустой файл a.json и использовать его в качестве источника. Затем добавьте свой собственный контент с gulp-header и делай с ней что хочешь.

Если вы хотите избежать лишних файлов (a.json), попробуйте это:

'use strict';
const gulp = require('gulp');
const transform = require('gulp-transform');
const rename = require("gulp-rename");

gulp.task('default', function () {
    return gulp.src("./gulpfile.js")
        .pipe(transform(() => JSON.stringify({a:1,b:2})))
        .pipe(rename("a.json"))
        .pipe(gulp.dest("dist/"))
});
Другие вопросы по тегам