Gulp forEach错误

时间:2016-05-23 12:01:16

标签: javascript gulp

使用Gulp我需要在我的文件中搜索字符串,并在找到此字符串时登录到控制台。

当我搜索每个文件中存在的字符串时,以下情况有效。

function logMatches(regex) {
  return map(function(file, done) {
    file.contents.toString().match(regex).forEach(function(match) {
      console.log(match);
    });
    done(null, file);
  });
}

var search = function() {
  return gulp.src(myfiles)
    .pipe(logMatches(/string to search for/g));
},

但是如果字符串不在每个文件中,那么我会收到错误:

TypeError: Cannot read property 'forEach' of null

我知道有正则表达式匹配的结果,因为它们被记录到控制台(错误之前)。

1 个答案:

答案 0 :(得分:0)

看起来您的内联函数被多次调用(我想那是map应该做的事情。

第一次,正则表达式匹配,正如您在控制台日志中可以正确看到的那样。

但第二次,它并不匹配。因此,.match(regex)返回null,并且您实际上正在调用null.forEach(...),因此错误。

尝试检查正则表达式结果,然后再调用forEach

  return map(function(file, done) {
    var contents = file.contents.toString();
    var matches = contents.match(regex);
    console.log(contents, matches); // Here you can see what's going on
    if(matches) matches.forEach(function(match) {
      console.log(match);
    });
    done(null, file);
  });