首页 > 解决方案 > 单个 gulp-if 调用中的多个流?

问题描述

在下面的代码中,我plugins.if( !config.isDevelopmentMode && config.compileBladeTemplates, /* task */)检查了两次(plugins.ifgulp-if包)。我可以通过一次检查重构下面的代码吗?不确定仅使用gulp-if 是否可行,因此允许使用其他插件。

const   gulp = require('gulp'),
        plugins = require('gulp-load-plugins')();

// ...
.pipe(plugins.if(
  !config.isDevelopmentMode && config.compileBladeTemplates,
  plugins.replace(
     /<!--\s+@blade\s+namedRoute\(\s*(.+?)\s*\)\s*-->\s*(?:\r\n|\r|\n)?\s*(<.+href=")(?:.+?)(".*\/?>)/g,
     `$2{{ route('$1') }}$3`
  )
))
.pipe(plugins.if(
  !config.isDevelopmentMode && config.compileBladeTemplates,
  plugins.replace(
     /<!--\s+@blade\s+(yield|include)\s*-->/g,
     ` @$1('$2')`
  )
))
// ...

标签: javascriptnode.jsgulpgulp-if

解决方案


如果我了解您要做什么,我认为懒惰的管道会为您工作。参见gulp-if 和 lazypipe

var replaceChannel = lazypipe()
      plugins.replace(
     /<!--\s+@blade\s+namedRoute\(\s*(.+?)\s*\)\s*-->\s*(?:\r\n|\r|\n)?\s*(<.+href=")(?:.+?)(".*\/?>)/g,
     `$2{{ route('$1') }}$3`
    )
    plugins.replace(
     /<!--\s+@blade\s+(yield|include)\s*-->/g,
     ` @$1('$2')`
   );

然后在你的任务中:

.pipe(plugins.if(
  !config.isDevelopmentMode && config.compileBladeTemplates, replaceChannel()))

推荐阅读