Как использовать список объектов в качестве исходного потока 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, который сделает это за вас.
Так как 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/"))
});