【问题标题】:How can I minimize duplication of code that sometimes needs a callback?如何最大限度地减少有时需要回调的代码重复?
【发布时间】:2019-01-21 23:20:49
【问题描述】:

在我的 gulpfile 中,我有一个任务处理我的所有页面,另一个任务监视我的页面的更改并仅处理更改的页面。它看起来像这样:

const buildPages = path => cb => {
  gulp.src(path)

    // some lines of piping

    .pipe(gulp.dest(pages.dist));

  cb();
}

const watchPages = () =>
  gulp.watch(pages.src).on('change', path =>
    gulp.src(path)

      // the same piping as above

      .pipe(gulp.dest(pages.dist))
  );

gulp.watch()返回的chokidar watcher对象的.on()方法不接收回调函数,而上面的gulp任务需要一个。所以要删除代码重复,我可以这样做:

const buildPages = path =>
  gulp.src(path)

    // some lines of piping

    .pipe(gulp.dest(pages.dist));

const buildPagesWithCallback = path => cb => {
  buildPages(path)
  cb();
}

const watchPages = () =>
  gulp.watch(pages.src).on('change', path =>
    buildPages(path)
  );

这是正确的方法吗,或者有没有一种方法可以在不创建额外函数的情况下删除重复项(也许通过让观察者接收回调)?

【问题讨论】:

    标签: javascript callback gulp code-duplication


    【解决方案1】:

    不确定您的其他要求/需要是什么,但根据您的描述,我通常会有这样的设置(假设您使用的是 gulp 4):

    const src = [ './src/pageA/**/*.js', ...others ];
    const dist = './dist';
    
    const buildPages = () => gulp.src(src).pipe(...).pipe(gulp.dest(dist));
    const callback = () => { /* do stuff */ };
    
    exports.buildPageWithCallback = gulp.series(buildPages, callback);
    exports.watchPages = () => gulp.watch(src, gulp.series(buildPages));
    exports.watchPageWithCallback = () => gulp.watch(src, gulp.series(buildPages, callback));
    

    我会使用gulp.series 运行回调而不显式将回调传递给任务生成器函数,并将任务直接传递给gulp.watch

    如果您的要求要求buildPages 接受path,那么我认为您的做法是正确的,如果我误解了问题,请见谅

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-15
      • 1970-01-01
      • 1970-01-01
      • 2011-07-23
      • 2021-11-01
      相关资源
      最近更新 更多