2016-02-02 22 views
2

我的代码为:咕嘟咕嘟凉亭主失去本身

var gulp = require('gulp'); 
var clean = require('gulp-clean'); 
var concat = require('gulp-concat'); 
var uglify = require('gulp-uglify'); 
var filter = require('gulp-filter'); 
var mainBowerFiles = require('main-bower-files'); 

var filterByExtension = function(extension){ 
    return filter(function(file){ 
     return file.path.match(new RegExp('.' + extension + '$')); 
    }); 
}; 

gulp.task('third', function(){ 
    var mainFiles = mainBowerFiles(); 

    if(!mainFiles.length){ 
     // No main files found. Skipping.... 
     return; 
    } 

    var jsFilter = filterByExtension('js'); 

    return gulp.src(mainFiles) 
     .pipe(jsFilter) 
     .pipe(concat('third-party.js')) 
     .pipe(gulp.dest('./app')) 
     .pipe(jsFilter.restore()) 
     .pipe(filterByExtension('css')) 
     .pipe(concat('third-party.css')) 
     .pipe(gulp.dest('./app')); 
}); 

这里的错误 “返回file.path.match( '' 新的正则表达式(+扩展+ '$'))”,但这应该工作。有什么建议么?

非常感谢。

+0

它说的错误是什么? –

+0

@马克没有答案解决这一问题?如果是这样,请将其标记为已接受:) –

回答

3

你的问题是你的过滤函数中的返回类型。 NodeJS,特别是Gulp对你通过管道的类型非常挑剔。你只需要一个意想不到的回报来打破这个链条。

根据gulp-filter,你的嵌套过滤器应该返回一个布尔值,并且String.prototype.match将返回一个匹配结果数组,否则返回null(如果没有匹配的话)。这足以打破这个事情,因为它不期望一个数组。

您可以使用RegExp.prototype.test返回boolean,或检查match(...).length > 0。一个可能的解决办法:

JS:

var filterByExtension = function(extension){ 
    return filter(function(file){ 
     var matches = file.path.match(new RegExp('.' + extension + '$')); 
     return matches && matches.length > 0; 
    }); 
};