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

Running gulp.watch server-side causes changed files to miss in the results

我使用 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);
    });
});

可能是 SSHFS 的写入延迟。

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

已编辑: 正如空指针异常所评论的那样,我澄清了我的答案:

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

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

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