运行 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 任务中的超时可以增加在内容写入文件后执行任务的机会。
我使用 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 任务中的超时可以增加在内容写入文件后执行任务的机会。