如何使用对象列表作为吞噬源码stream
我知道,吞咽需要一个乙烯源stream才能正常工作,但有没有简单的方法来使用已经存在的乙烯基文件或JSON对象,而不是众所周知的gulp.src,只能采取globs?
经过多次研究,我没有find任何解决scheme,所以我决定与你分享我的解决scheme。
这个问题分两步解决
1:你需要把你想要的任何东西转换成一个黑胶唱片。 这可以这样做
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:从乙烯基文件中创build一个stream
我发现这些步骤可能是重复的,并且可能使代码更不可读,所以我决定将这些步骤封装在一个npm包中,为您做到这一点。
由于gulp使用乙烯基文件作为input并实际使用其一些属性(如.base
),所以创build乙烯基文件以利用.base
是不可避免的。 所以我build议这个访问来实现你的目标:
'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/")) });
创build一个空文件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/")) });