2014-03-06 51 views
4

編譯TypeScript時,我得到了很多空的JavaScript文件,因爲它們的TypeScript對應文件只包含接口。目前沒有tsc選項來抑制這些文件的生成。我正在使用gulp-tsc插件進行編譯。Gulp任務刪除空文件

是否有插件或其他方法來清理空文件,甚至是一個更通用的gulp插件,它允許我根據它們的名稱和內容刪除文件?或者有沒有一種方法可以在不使用插件的情況下做到這一點?

回答

3

我想你可以比較容易地使用node-glob尋求外界gulp匹配的文件,像這樣:

var glob = require('node-glob'), 
    fs = require('fs); 

gulp.task('delete-empty-files', function(cb) { 
    glob('/path/to/generated/**/*.js', function(err, files) { 
     files.forEach(function(file) { 
      if(fs.statSync(file).size === 0) { 
       fs.unlinkSync(file); 
      } 
     }); 
     // make sure the task runs asynchronously! 
     cb(); 
    }); 
}); 

或者,你可以使用gulp-tap,實現了類似的結果,就像這樣:

var tap = require('gulp-tap'), 
    fs = require('fs); 

gulp.task('delete-empty-files', function() { 
    return gulp.src('/path/to/generated/**/*.js') 
     .pipe(tap(function(file) { 
      if(file.stat.size === 0) { 
       fs.unlinkSync(file); 
      } 
     }); 
    }); 
}); 

他們非常平等,真的。我認爲第一個會更快,因爲它不會有從gulpvinyl-fs的額外的東西。

可能能夠將{read: false}選項添加到gulp.src()加快速度,但也可能被讀取禁止.stat。如果您想嘗試一下,你添加這樣的:

return gulp.src('/path/to/files/**/*.js', {read: false}).pipe(...) 
+0

優秀。感謝您的全面回答,並將我帶入'gulp-tap'。 –

1

更好的答案應該是隻命名與.d.ts延伸,而不是那些.TS接口文件。沒有文件以這種方式生成。

+0

是的,這在*有些情況下是真的。只是經過多次實驗,我才使用外部模塊,這使得我可以將接口放入.d.ts文件。所以爲你+1。儘管如此,刪除空文件可能會有很好的用例,所以我希望保留當前接受的答案,以便從Google那裏獲得幫助,這些人可能正在尋找一種方法來刪除空文件,而不是解決這個TypeScript問題。謝謝您的回答。 –

+0

是啊 - 「爲您的特定用例提供更好的答案」。乾杯! –

0

或者,對於任何面臨類似問題的人,gulp-clip-empty-files解決了這個問題。

從流中刪除空文件。這可以防止像gulp-sass這樣的其他一些插件錯誤,並且可以有效地移除佔位符。

用法很簡單...

var gulp = require('gulp'); 
var clip = require('gulp-clip-empty-files'); 

gulp.task('default', function() { 
    return gulp.src('src/*.scss') 
     .pipe(clip()) 
     .pipe(gulp.dest('dist')); 
}); 

在這個例子中所有空.scss文件將被 「裁剪」(忽略?)寫出來之前