6

我知道 gulp 需要乙烯基源流才能正常工作,但是有没有一种简单的方法可以使用已经存在的乙烯基文件或 json 对象,而不是众所周知的只需要 glob 的 gulp.src?

4

2 回答 2

6

经过多次研究,我没有找到任何好的解决方案,所以我决定与你分享我的解决方案。

这个问题分两步解决

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

于 2017-04-01T13:27:17.270 回答
1

由于 gulp 使用乙烯基文件作为输入,并且实际上使用了它的一些属性(例如.base),因此创建乙烯基文件以利用 gulp 是不可避免的。所以我推荐这种访问来实现你的目标:

'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/"))
});
于 2017-04-09T12:58:53.810 回答