gulp-filter正在过滤所有内容

时间:2016-03-10 09:05:41

标签: javascript node.js gulp gulp-filter

gulp-filter正在过滤所有内容。

我正在尝试使用gulp-filtergulp-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});
    没有任何东西由gulp-uglify处理。
  • var f = filter('!ToCOptions.js', {"restore": true});
    没有任何东西由gulp-uglify处理。
  • var f = filter('!src/ToCOptions.js', {"restore": true});
    没有任何东西由gulp-uglify处理。
  • var f = filter('src/ToCOptions.js', {"restore": true});
    只有我想要排除的文件由gulp-uglify处理。
  • var f = filter(['*', 'src/ToCOptions.js'], {"restore": true});
    只有我想要排除的文件由gulp-uglify处理。
  • var f = filter(['*', '!/src/ToCOptions.js'], {"restore": true});
    没有任何东西由gulp-uglify处理。
  • var f = filter(['*', '!/ToCOptions.js'], {"restore": true});
    没有任何东西由gulp-uglify处理。

我做错了什么?

谢谢。

2 个答案:

答案 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*/
    }))
});

我希望它会对你有所帮助。

由于