Gulp webserver,什么是过滤器?

时间:2015-08-04 07:56:29

标签: javascript filter webserver gulp

我正在学习系列教程,而且我熟悉Gulp的原理,但

  

我似乎无法在以下示例

中找到 Filter函数的功能

此处还显示了示例,但未提供进一步说明 https://github.com/hiddentao/gulp-server-livereload#how-can-i-pass-a-custom-filter-to-livereload

这是代码。

gulp.task('serve', function(done) {
  gulp.src('')
    .pipe(server({
      livereload: {
        enable: true,
        filter: function(filePath, cb) {
          if(/main.js/.test(filePath)) {
            cb(true)
          } else if(/style.css/.test(filePath)){
            cb(true)
          }
        }
      },
      open: true
    }));
});

1 个答案:

答案 0 :(得分:1)

简答:

通过过滤器,您可以排除项目目录中我更改的文件(例如git文件),但您的服务器不会自动重新加载。您可以在此函数中定义任意逻辑。

更长的回答:

过滤器定义了一个函数,该函数获取已更改文件的filePath以及触发重新加载的预定义回调函数cb

function (shouldReload) {
  if (shouldReload) {
    gutil.log('Livereload: file changed: ' + filename);

    config.livereload.io.sockets.emit('reload');
    // Treat changes to sourcemaps as changes to the original files.
    filename = filename.replace(/\.map$/, '');

    config.livereload.io.sockets.emit('file_changed', {
      path: filename,
      name: path.basename(filename),
      ext: path.extname(filename),
    });
  }
}

这意味着如果您致电cb(true),服务器的实时重新加载已完成。

在我阅读您的示例时,您希望仅在文件main.jsstyle.css更改时重新加载您的服务器。因此,.转义\.可能与任何字符匹配(请参阅正则表达式):

if(/main\.js/.test(filePath)) {
  cb(true)
} else if(/style\.css/.test(filePath)){
  cb(true)
}

这意味着执行此任务。保存和更改main.jsstyle.css将触发服务器的实时重新加载。

我的服务器有时卡住而且没有重新加载。按一次CTRL + C有助于让他恢复工作; - )