运行gulp.watch服务器端导致更改的文件在结果中遗漏

时间:2015-06-24 12:54:13

标签: javascript sass gulp gulp-watch

我使用Gulp(3.8.11)来渲染SASS和JavaScript。它在Ubuntu 14.04.2 LTS上运行服务器端,旁边是Apache2,PHP和MySQL。

每次我更改文件(使用Sublime Text 2通过SSHFS远程更改)时,gulp.watch将启动指定的任务。在结果中,有50%的可能性缺少更改的文件(对于SASS和JS两个任务)。

当我手动运行gulp(不使用gulp.watch)时,我得到了预期的结果。在本地使用相同的项目运行gulp.watch,一切正常。

没有错误消息,只是一个在浏览器中看起来很棒的不完整的渲染JS或CSS文件。令人沮丧。

编辑:对观察任务进行的更改解决了问题。

var path = {
    js: [
        'src/js/*.js',
        'src/js/*/*.js',
        'src/js/*/*/*.js'
    ],
    sass: [
        'src/sass/reset.scss',
        'src/sass/constant.scss',
        'src/sass/base.scss',
        'src/sass/*.scss'
    ]
};

gulp.task('watch', function() {
    livereload.listen();

    gulp.watch(path.js, function() {
        setTimeout(function () {
            gulp.start('js');
        }, 100);
    });

    gulp.watch(path.sass, function() {
        setTimeout(function () {
            gulp.start('sass');
        }, 100);
    });
});

1 个答案:

答案 0 :(得分:1)

可能写出SSHFS的延迟。

因此,您可能希望将代码执行包装在Timeout中以解决此问题

编辑: 正如Null Pointer例外,我澄清了我的答案:

在SSHFS上,文件的实际内容存在写延迟。因此,在将内容实际写入服务器上的文件之前,可能会触发监视。因此,更改可能不会包含在任务的运行中。

要解决此延迟,gulp任务中的超时可能会增加在将内容写入文件后执行任务的机会。

此处有更多详情https://github.com/floatdrop/gulp-watch/issues/22