【问题标题】:How can I promise-ify a one-off usage of gulp in my application?我如何保证在我的应用程序中一次性使用 gulp?
【发布时间】:2015-06-25 16:26:36
【问题描述】:

作为我正在编写的一个小程序的一部分,我想使用 gulp 将大量文件转换为 markdown。这不是独立于程序的构建步骤的一部分。这是程序的一部分。所以我没有使用 gulpfile 来处理这个问题。

问题是,因为它是异步的,所以我想使用一个 Promise,它会在 gulp 任务完成时提醒我。

这样的东西是理想的:

io.convertSrc = function() {
  var def = q.defer();

  gulp.src(src + '/*.md')
    .pipe(marked({}))
    .pipe(gulp.dest(dist), function() {
      def.resolve('We are done!');
    });

    return def.promise;
}

但是pipe 不接受回调。我怎么能处理这个?感谢您的帮助,我对 gulp 有点陌生。

【问题讨论】:

    标签: javascript node.js gulp q


    【解决方案1】:

    gulp 中的所有内容都是一个流,因此您可以只监听 enderror 事件。

    io.convertSrc = function() {
      var def = q.defer();
      gulp.src(src + '/*.md')
        .pipe(marked({}))
        .pipe(gulp.dest(dist))
        .on('end', function() {
          def.resolve();
        })
        .on('error', def.reject);
      return def.promise;
    }
    

    顺便说一句,Q 1.0 不再开发(除了这里和那里的一些修复)并且将与 Q 2.0 完全不兼容;我推荐Bluebird 作为替代方案。

    还值得一提的是,NodeJS 0.12 及更高版本已内置 ES6 承诺(不需要 --harmony 标志),因此如果您不寻求向后兼容性,您可以使用它们来代替..

    io.convertSrc = function() {
      return new Promise(function(resolve, reject) {
        gulp.src(src + '/*.md')
          .pipe(marked({}))
          .pipe(gulp.dest(dist))
          .on('end', resolve)
          .on('error', reject);
      });
    };
    

    【讨论】:

    • 啊!是的!早该意识到的!谢谢!
    • 另外,我对 Node.js 中的 ES6 Promise 支持一无所知。这太疯狂了/太棒了。
    【解决方案2】:

    由于 Gulp 任务是一个流,你可以监听它的事件:

    io.convertSrc = function() {
      var def = q.defer();
    
      var stream = gulp.src(src + '/*.md')
        .pipe(marked({}))
        .pipe(gulp.dest(dist));
    
      stream.on('end', function() {
        def.resolve();
      });
    
      stream.on('error', function(err) {
        def.reject(err);
      });
    
      return def.promise;
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-05
      • 2017-01-11
      • 1970-01-01
      • 1970-01-01
      • 2012-10-09
      • 1970-01-01
      相关资源
      最近更新 更多