gulp-filter正在过滤所有内容。
我正在尝试使用gulp-filter从gulp-uglify中排除单个文件:
var uglify = require('gulp-uglify');
var filter = require('gulp-filter');
var paths = {
css: 'src/*.css',
html: 'src/*.html',
js: 'src/*.js'
};
gulp.task('js', function() {
// Create a filter for the ToC options file. We don't want to minify that.
var f = filter(['*', '!src/ToCOptions.js'], {"restore": true});
return gulp.src(paths.js)
.pipe(f)
.pipe(uglify())
.pipe(f.restore)
.pipe(gulp.dest('js'));
});
我读过gulp-filter filters out all files,这似乎是同一个问题,但接受的答案对我不起作用。
我在过滤器上尝试了几种变体,包括:
var f = filter(['*', '!ToCOptions.js'], {"restore": true});
var f = filter('!ToCOptions.js', {"restore": true});
var f = filter('!src/ToCOptions.js', {"restore": true});
var f = filter('src/ToCOptions.js', {"restore": true});
var f = filter(['*', 'src/ToCOptions.js'], {"restore": true});
var f = filter(['*', '!/src/ToCOptions.js'], {"restore": true});
var f = filter(['*', '!/ToCOptions.js'], {"restore": true});
我做错了什么?
谢谢。
答案 0 :(得分:10)
显然,这是Github存储库中issue #55中解释的文档中的错误。
我的案例中的解决方案是:
var f = filter(['**', '!src/ToCOptions.js'], {'restore': true});
正如该问题的作者所解释的那样,单个星号仅匹配不在子目录中的文件。此任务的所有文件都在子目录中,因此第一个模式不匹配任何内容,第二个模式没有任何结果subtract from。
要理解**
,我必须在Linux系统上使用man bash
并搜索 globstar ,因为node-glob documentation引用了Bash实现:< / p>
globstar
If set, the pattern ** used in a pathname expansion context will
match all files and zero or more directories and subdirectories. If the
pattern is followed by a /, only directories and subdirectories match.
答案 1 :(得分:1)
我已经使用on("data", function(file){})
创建了一个简单的示例,只是为了让您的理解更加清晰 NodeJS Streams 。
gulp.task('js', function() {
return gulp.src("my/js/folder/*.js")
.on("data", function(file){
console.log(file)
// here you can filter all your file depends on name/path/etc.
})
...
do something else
...
the same you can do in gulp.dest method
.pipe(gulp.dest(function(file){
// conditions
...
return "my expected path"/* your expected path for file depends on conditions*/
}))
});
我希望它会对你有所帮助。
由于