【问题标题】:Understanding node streams and vinyl-fs了解节点流和vinyl-fs
【发布时间】:2016-05-18 20:18:59
【问题描述】:

我遇到了一个奇怪的问题,我不确定我的问题出在哪里。可能是因为我对节点流或vinyl-fs的一些基础知识缺乏了解。

不管怎样,这里是描述:

我正在构建我想与 gulp 一起使用的不同脚本。

例如,这个正在构建我需要的一些资产;更准确地说,我将引导源文件从 node_modules 复制到我的资产文件夹。

这个函数应该返回一个promise,这样我可以更容易地用gulp来使用它。

这是完成这项工作的 sass-bootstrap.js 文件:

  • 这是一个较短的版本,之前有一些检查,但与我的问题无关。
  • 假设所有变量都已定义。
var defer    = Q.defer(),
    vinylFs  = require( 'vinyl-fs' ),
    map      = require( 'map-stream' );

function sass_bootstrap() {
  var defer = Q.defer();
  vinylFs.src( [ bootstrap_sass_route + '/**/_*.scss' ] )
    .pipe( vinylFs.dest( assets_sass_bootstrap ) )
    .pipe( map( function( file, cb ) { 
      cb( null, file ); 
    }))
    .on( 'end', function(){
      defer.resolve();
    });
  return defer.promise;
}

这是使用它的 gulp 任务:

  • 又是一个简化版本,仅包含相关代码
gulp.task( 'development', function ( cb ) {

  sass_bootstrap()
    .then( function(){
      cb();
    })
    .catch( function( err ){
      err.log();
      cb();
    });


});

这很好用,但我不太明白为什么它不能这样工作:

function sass_bootstrap() {
  var defer = Q.defer();
  vinylFs.src( [ bootstrap_sass_route + '/**/_*.scss' ] )
    .pipe( vinylFs.dest( assets_sass_bootstrap ) )
    .on( 'end', function(){
      defer.resolve();
    });
  return defer.promise;
}

此外,我不明白为什么我需要致电map()。我认为在我的第一个示例中根本不需要...

任何提示或解释将不胜感激。

谢谢!

【问题讨论】:

  • 您使用的是哪个版本的vinyl-fs?存在 vfs.dest 没有结束(但 map-stream 会)的(已修复)问题:github.com/gulpjs/vinyl-fs/issues/120。目前还没有带有此标签的版本,但请尝试 package.json 中的 master 分支。

标签: javascript node.js promise q


【解决方案1】:

所以,这是一个反模式。

我们不应该混用 promise 和 stream;这样做的正确方法是在 sass_bootstrap 上返回流并监听结束/错误事件:

sass-bootstrap.js

var vinylFs  = require( 'vinyl-fs' );

function sass_bootstrap() {
  return vinylFs
    .src( [ bootstrap_sass_route + '/**/_*.scss' ] )
    .pipe( vinylFs.dest( assets_sass_bootstrap ) )
}

gulp 任务

gulp.task( 'development', function ( cb ) {
  return sass_bootstrap()
    .on( 'end', cb );
    .on( 'error' function( err ) {
      // Do error stuff
      cb( err )
    });
});

【讨论】:

    猜你喜欢
    • 2019-04-01
    • 2023-02-19
    • 2020-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-17
    • 2016-03-22
    • 2016-12-30
    相关资源
    最近更新 更多