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;
});
};
我的代码为:
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;
});
};