2016-03-10 51 views
3

gulp-filter正在過濾所有內容。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});
    沒有處理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處理的。
  • ​​
    沒有經過gulp-uglify處理。
  • var f = filter(['*', '!/ToCOptions.js'], {"restore": true});
    沒有處理gulp-uglify。

我在做什麼錯?

謝謝。

+0

我認爲'上(「數據」,(文件)=> {})'事件會幫助你 –

+0

@你能提供更多的信息,或者甚至更好地鏈接到一個有解釋的例子嗎?它看起來像一個事件處理程序。傳遞給它的參數是什麼類型的值... string?... object?我可能應該提到我對Gulp相當陌生,並且我從未在Gulp之外使用過Node.js。 – Vince

回答

9

顯然,這是在issue #55在Github上庫解釋了文檔中的錯誤。

在我的情況的解決方法是這樣的:

var f = filter(['**', '!src/ToCOptions.js'], {'restore': true}); 

由於這個問題的作者解釋,一個星號只匹配不在子目錄中的文件。這個任務的所有文件都在一個子目錄中,所以第一個模式不匹配任何東西,第二個模式沒有任何結果到subtract from

要了解**,我不得不在Linux系統上使用man bash和搜索globstar因爲node-glob documentation參考了猛砸實現:

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

哇!你救了我的一天:) – ronkot

+1

thx文斯,幫了我很多。順便說一句,這是我如何濾除所有* .min.js文件:var f = filter(['**','!**/*。min.js'],{'restore':true}); –

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

我希望它能幫助你。

感謝

+0

在這種情況下沒有幫助。我使用的模式根本不匹配任何東西,所以當我把它放在過濾器後面的數據流中時沒有任何數據。但是,我認爲'.on('data',function(file){})'將來會非常方便。謝謝。 – Vince

+0

@Vince不使用模式和'gulp-filter'。 '''src/js/*。js「,」src/css/* .css「]'並在'on(」data「)內對其進行過濾' –

+0

'我試過了你建議,但我沒有比'console.log'更遠,因爲我不知道如何處理'file'。我可能會開始明白,如果我閱讀[乙烯基文檔](https://github.com/gulpjs/vinyl-fs),但這就像重新發明輪子。學習如何從'gulp.src'過濾文件而不使用插件將從長遠來看是有價值的,但在這種情況下,我只需要知道如何正確使用插件。 – Vince