我的代码为:
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(新的RegExp('。' +扩展程序+' $'))",但这应该工作。有什么建议吗?
非常感谢。
答案 0 :(得分:3)
您的问题是过滤器功能中的返回类型。 NodeJS,特别是Gulp对你通过管道的类型非常挑剔。你只需要一次意想不到的回报来打破链条。
根据gulp-filter,您的嵌套过滤器应该返回一个布尔值,String.prototype.match
将返回匹配结果的数组,如果没有匹配则返回null。这足以打破这个因为它不期望一个数组。
您可以使用返回布尔值的RegExp.prototype.test
,也可以检查是否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;
});
};