Gulp任务删除空文件

时间:2014-03-06 00:15:25

标签: javascript gulp build-process

编译TypeScript时,我会生成很多空的JavaScript文件,因为它们的TypeScript对应项只包含接口。目前没有tsc选项来禁止生成这些文件。我正在使用gulp-tsc插件进行编译。

是否有插件或其他方法来清理空文件,甚至是更通用的gulp插件,允许我根据其名称和内容删除文件?或者有没有办法在不使用插件的情况下在gulp中执行此操作?

3 个答案:

答案 0 :(得分:2)

我认为您可以相对轻松地使用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(...)

答案 1 :(得分:1)

更好的答案是只使用.d.ts扩展名而不是.ts来命名那些接口文件。没有文件以这种方式生成。

答案 2 :(得分:0)

或者,对于遇到类似问题的其他人,gulp-clip-empty-files解决了这个问题。

  

从流中删除空文件。这可以防止其他一些错误   像gulp-sass这样的插件可以用来删除占位符。

使用非常简单......

.scss

在此示例中,所有空DataTable个文件都将被剪切" (在写出之前忽略?)