編譯TypeScript時,我得到了很多空的JavaScript文件,因爲它們的TypeScript對應文件只包含接口。目前沒有tsc
選項來抑制這些文件的生成。我正在使用gulp-tsc
插件進行編譯。Gulp任務刪除空文件
是否有插件或其他方法來清理空文件,甚至是一個更通用的gulp插件,它允許我根據它們的名稱和內容刪除文件?或者有沒有一種方法可以在不使用插件的情況下做到這一點?
編譯TypeScript時,我得到了很多空的JavaScript文件,因爲它們的TypeScript對應文件只包含接口。目前沒有tsc
選項來抑制這些文件的生成。我正在使用gulp-tsc
插件進行編譯。Gulp任務刪除空文件
是否有插件或其他方法來清理空文件,甚至是一個更通用的gulp插件,它允許我根據它們的名稱和內容刪除文件?或者有沒有一種方法可以在不使用插件的情況下做到這一點?
我想你可以比較容易地使用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);
}
});
});
});
他們非常平等,真的。我認爲第一個會更快,因爲它不會有從gulp
和vinyl-fs
的額外的東西。
您可能能夠將{read: false}
選項添加到gulp.src()
加快速度,但也可能被讀取禁止.stat
。如果您想嘗試一下,你添加這樣的:
return gulp.src('/path/to/files/**/*.js', {read: false}).pipe(...)
更好的答案應該是隻命名與.d.ts延伸,而不是那些.TS接口文件。沒有文件以這種方式生成。
是的,這在*有些情況下是真的。只是經過多次實驗,我才使用外部模塊,這使得我可以將接口放入.d.ts文件。所以爲你+1。儘管如此,刪除空文件可能會有很好的用例,所以我希望保留當前接受的答案,以便從Google那裏獲得幫助,這些人可能正在尋找一種方法來刪除空文件,而不是解決這個TypeScript問題。謝謝您的回答。 –
是啊 - 「爲您的特定用例提供更好的答案」。乾杯! –
或者,對於任何面臨類似問題的人,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
文件將被 「裁剪」(忽略?)寫出來之前
優秀。感謝您的全面回答,並將我帶入'gulp-tap'。 –