【问题标题】:How to get a gulp stream from a vinyl object?如何从乙烯基物体中获取 gulp 流?
【发布时间】:2017-05-23 14:44:01
【问题描述】:

如何使用vinyl 对象创建流,以便在其上使用 gulp.js 插件?

乙烯基物体示例:

var file = getFoo();  // An in-memory file as a vinyl object.
return gulp.src(file) // What to do here? gulp.src only accepts globs.
    .pipe(css(opts))      // (gulp-clean-css)
    .pipe(gulp.dest('...'));

lofihelsinki 的评论 (return file.pipe(css())...) 解决了第一种情况。

乙烯基对象和流的示例:

var file = getFoo();
return merge(gulp.src('*.css'), file)
    .pipe(concat('foobar.css'))
    .pipe(css(opts))
    .pipe(gulp.dest('...'));

以两个乙烯基物体为例:

var file1 = getFoo();
var file2 = getBar();
return merge(file1, file2)      // (gulp-merge)
    .pipe(concat('foobar.css')) // (gulp-concat)
    .pipe(css(opts))
    .pipe(gulp.dest('...'));

【问题讨论】:

  • return file.pipe(css()) 工作吗?
  • 它有效,谢谢!我还有一个没有帮助的案例,我会在几分钟内更新问题。
  • 我会把它变成答案。

标签: javascript node.js build gulp


【解决方案1】:

您可以使用 vinyl-source-stream 或等效的 (https://www.npmjs.com/package/gulp-streamify) 并添加新的pipe 以转换为流。 您可以使用 gulp-map 明确地做到这一点,例如 here

【讨论】:

    【解决方案2】:

    文件本身是一个可用的对象

    var file = getFoo();
    return file
        .pipe(css(opts))
        .pipe(gulp.dest('...'));
    

    【讨论】:

    • 谢谢。在您昨天发表评论后,我又添加了两个示例。虽然问题保持不变(使用乙烯基对象创建流),但调用文件的管道并不涵盖有函数接受流的情况。
    • 如果只有一个空管道 (file.pipe()) 是将文件转换为流的可行方法。也许编写一个愚蠢的 gulp 函数来按原样传递文件内容,如 file.pipe(asIs()) 会有所帮助,我会看看这个。
    • 不,TypeError:file.pipe 不是函数。
    【解决方案3】:

    对于两个流,使用gulp-buffer

    var buffer = require('gulp-buffer');
    
    var file1 = getFoo();
    var file2 = getBar();
    
    return merge(file1, file2)      // (gulp-merge)
        .pipe(buffer())             // (gulp-buffer)
        .pipe(concat('foobar.css')) // (gulp-concat)
        .pipe(css(opts))
        .pipe(gulp.dest('...'));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-26
      • 1970-01-01
      • 2015-03-01
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多