Gulp.js,保存文件时监视任务运行两次

Øyv*_*ind 8 javascript gulp

鉴于我的gulpfile.js中的以下代码,每次保存或更改文件时,任务运行两次而不是一次,为什么?我只想让它运行一次.

var gulp = require('gulp');

gulp.task('default', function() {

  gulp.watch('server/**/*.js', function(){
    console.log('This runs twice everytime I change/save a javascript file located at server/**/*.js');
  }); 

});
Run Code Online (Sandbox Code Playgroud)

我也经历了与grunt和插件grunt-contrib-watch相同的经历.

Rya*_*lah 13

问题出现了,因为您的编辑器(在本例中是Coda 2)在保存时将文件修改两次.vim中出现同样的问题,因为vim 在保存时如何创建缓冲区备份.

在vim中解决问题的方法是添加

set nowritebackup
Run Code Online (Sandbox Code Playgroud)

到你的~/.vimrc文件.这会将默认保存协议更改为仅对原始文件进行一次编辑.

换句话说,默认保存协议如下:

  1. 将缓冲区写入备份文件
  2. 删除原始文件
  3. 将备份重命名为原始文件的名称

添加set nowritebackup只需在保存时替换原始文件.此协议用于在保存时发生I/O错误时降低数据丢失的风险.


Mus*_*00m 12

我在Espresso中添加了相同的问题,您可以使用debounceDelay选项在Gulp中"修复"它,如下所示:

gulp.watch('/**/*.less', {debounceDelay: 2000}, ['less']);
Run Code Online (Sandbox Code Playgroud)

这对我有用.但是将它添加到每个gulp.watch是一个痛苦我不知道我们是否可以将这个选项全局...


小智 8

这对我有用

.pipe(watch('/**/*.less', { awaitWriteFinish: true }))
Run Code Online (Sandbox Code Playgroud)

https://github.com/paulmillr/chokidar#api


Øyv*_*ind 0

似乎这个问题的答案是所使用的编辑器 Coda 2 的一个功能。根据此处的一些评论以及对多个编辑器的测试,Coda 2 似乎保存了一个临时文件或类似文件,这导致了 gulp watch函数运行两次。

在使用 Coda 2 时我还没有找到可行的解决方案,最终切换到 Sublime Text 3。