Gulp bower main 迷路了

Gulp bower main losing itself

我的代码为:

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'));
});

这里有错误 "return file.path.match(new RegExp('.' + extension + '$'))",但这应该可以。有什么建议吗?

非常感谢。

你的问题是你的过滤器函数中的 return 类型。 NodeJS,尤其是 Gulp 对你通过管道传递的类型非常挑剔。你只需要一个意想不到的 return 就可以打破链条。

根据 gulp-filter,您的嵌套过滤器应该 return 一个布尔值,String.prototype.match 将 return 一个匹配结果数组,如果没有则为 null比赛。这足以破坏它,因为它不需要数组。

您可以使用 RegExp.prototype.test,其中 return 是一个布尔值,或者检查 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;
    });
};