Gulp dest:警告两个任务是否尝试写入同一目的地

时间:2015-11-16 19:16:42

标签: javascript typescript gulp

我想知道是否有一种简单的方法来检测两个任务是否写入同一个文件。

在此示例中,/js目录旁边有一个/ts目录。 /ts将被转换为与/js相同的目录。不应该有任何碰撞。问的是,如果发生碰撞,ts将获胜;但是,我想警告说发生了碰撞。

gulp.task('js', function() {
    return es.concat(
        gulp.src(config.src.path('js', '**', '*.js'))
            .pipe(gulp.dest(config.build.path(app, 'js')))
        //, ....
    );
});

gulp.task('ts', ['js'], function() {

    var tsResult = gulp.src(config.src.path('ts', '**', '*.ts'))
        .pipe(ts({
            declaration: true,
            noExternalResolve: true
        }));

    return es.concat([
        tsResult.dts.pipe(gulp.dest(
            config.build.path(app, 'definitions'))),

        tsResult.js.pipe(gulp.dest(
            config.build.path(app, 'js'))) // <--- same dest as js task
    ]);

})

我可以检测到ts任务是否覆盖了js任务刚刚到位的文件吗?

1 个答案:

答案 0 :(得分:1)

只是一个想法。你可以pass a callbackgulp.dest这样:

gulp.src('lib/*.js')
  .pipe(uglify())
  .pipe(gulp.src('styles/*.css'))
  .pipe(gulp.dest(function(file) {
    if (fs.existsSync('something here')) { // it's a deprecated call, use a newer one
       console.warn("File exists", file);
    }
    // I don't know, you can do something cool here
    return 'build/whatever';
  }));

自Gulp 3.8以来可以使用该功能:https://github.com/gulpjs/gulp/blob/master/CHANGELOG.md#380

其他资源: