我的代码是:
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('.‘’+扩展名+ '$'))",但这应该有效。有什么建议吗?
非常感谢。
发布于 2016-02-02 16:27:58
您的问题是过滤器函数中的返回类型。NodeJS,特别是Gulp,对于你通过管道的类型是非常挑剔的。你只需要一个意想不到的回报就能打破这条链。
根据gulp,嵌套过滤器应该返回一个布尔值,如果没有匹配,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;
});
};https://stackoverflow.com/questions/35158412
复制相似问题