Node.js streams =>在转换到文件夹之前删除文件夹的内容

时间:2016-03-25 23:11:13

标签: node.js gulp

我正在使用Gulp,我想删除/“清理”目录中的所有内容,然后再将编译后的源文件写入其中。

有没有办法将运行删除操作的流连接到执行读/转/写操作的流?

现在我有这个:

function transpileJSX() {

    var d = domain.create();

    d.run(function () {
        gulp.src('./public/static/app/js/views/**/*.js').pipe(react({harmony: true}))
            .pipe(gulp.dest('./public/static/app/js/jsx')).on('end', function () {
            d.emit('end');
            d.exit();
        });
    });

    return d;


}

function deleteJSX() {
    return gulp.src('./public/static/app/js/jsx/**/*.js')
        .pipe(clean({force: true}));
}


gulp.task('transpile-jsx', function () {
    return transpileJSX().on('error', function (err) {
        console.error(err);
    });
});

gulp.task('delete-jsx', function (cb) {
    return deleteJSX();
});

问题是这似乎不起作用:

deleteJSX().pipe(transpileJSX());

transpileJSX操作似乎在deleteJSX操作开始之前开始。当涉及到流时,可能会出现这种情况。但是我想通过确保整个删​​除操作首先完成来确保整个过程正常工作?

例如,如果我这样做:

gulp.task('some-task', ['delete-jsx','transpile-jsx'], function (done) {

    someTask(done);

});

gulp日志显示transpile-jsx任务在delete-jsx任务结束之前启动。

如果某人在转发文件夹之前有清洁文件夹的模式,我想复制它,谢谢!

1 个答案:

答案 0 :(得分:1)

你已经快到了。您只需重新排列任务依赖项,因为gulp运行任务以实现最大并发性:

gulp.task('transpile-jsx', ['delete-jsx'], function () {
  //...
});

gulp.task('some-task', ['transpile-jsx'], function () {
  //...
});

一旦Gulp 4击中,这将更容易。在那里你可以写出像:

这样的东西
gulp.task('some-task', gulp.series('delete-jsx', 'transpile-jsx', function () {
  //...
}));