Gulp Watch仅运行一次

fzwojiic  于 2022-12-08  发布在  Gulp
关注(0)|答案(5)|浏览(224)

我使用的是Gulp Watch示例:https://github.com/floatdrop/gulp-watch/blob/master/docs/readme.md#starting-tasks-on-events。

var gulp = require('gulp');
var watch = require('gulp-watch');
var batch = require('gulp-batch');

gulp.task('build', function () { console.log('Working!'); });

gulp.task('watch', function () {
    watch('**/*.js', batch(function () {
        gulp.start('build');
    }));
});

当我在Windows 8计算机上运行它时,它只在我第一次更改文件时运行:

C:\test>gulp watch
[08:40:21] Using gulpfile C:\test\gulpfile.js
[08:40:21] Starting 'watch'...
[08:40:21] Finished 'watch' after 2.69 ms
[08:40:31] Starting 'build'...
Working!
[08:40:31] Finished 'build' after 261 µs

下次什么都没发生。为什么?

tmb3ates

tmb3ates1#

对我来说,这是给任务增加了一个“回报”:

gulp.task('styles', function(){
 return gulp.src('css/styles.css')
    .pipe(autoprefixer())
    .pipe(gulp.dest('build'));
});
gfttwv5a

gfttwv5a2#

如果您仔细阅读文档,您会看到以下短语:
您可以传递普通回调函数,它将在每个事件上调用或将其 Package 在gulp-batch中以运行 * 一次*
这基本上就是gulp-batch的处理过程。要想一直监视它,只需删除批处理调用:

gulp.task('build', function (done) { 
    console.log('Working!'); 
    done();
});

gulp.task('watch', function () {
    watch('app/*.js', function () {
        gulp.start('build');
    });
});

(and将'done'回调添加到build以让Gulp知道您何时完成)。
顺便说一句......我不确定,但我认为gulp-watch不仅是用来看文件的,而且还可以直接返回一个黑胶对象。所以实际上使用内置的gulp.watch应该有同样的效果:

gulp.task('watch', function () {
    gulp.watch('app/**/*.js', ['build']);
});
brjng4g3

brjng4g33#

这似乎是known issue我有同样的问题,并使用相同的ddprrt。不同的是使用目录glob(通配符)作为绝对路径的替代。
我改了这个:

gulp.task('watch', function() {
   gulp.watch('sass/shortcutcss/*.scss', ['sass'])
 });

更改为:

gulp.task('watch', function() {
   gulp.watch('sass/**/*.scss', ['sass'])
 });
bpzcxfmw

bpzcxfmw4#

这个问题让我疯狂了一个周末.我试了所有的方法:

  • 添加完成()-事件
  • 重命名/触摸/清除目标CSS
  • 更具体地说明文件路径

但是这个问题的(原因和)解决方案是如此简单,以至于我在那之后感到可悲:
update your nodejs installation,我的是0.12.x!难怪这个不管用。
之后,watch事件再次工作。有时它也会再次出错。但在这种情况下,只需保存您的文件第二次,它会被识别。(我认为foundation/gulp watch检查更改的速度太快,而您的文件会被新上传的文件替换)

jljoyd4f

jljoyd4f5#

说来话长:
对我来说,它没有工作很长一段时间。一切似乎都设置正确,但只运行一次。
但是突然我开始在另一个项目上使用包裹js,同样的事情也发生在他们的builtn手表上。所以我寻找答案,我发现问题出在我的Vim设置上。
回答我的是来自@acobster https://stackoverflow.com/a/55435197/2686510的这个
简而言之:
通过添加set backupcopy=yes更新.vimrc

相关问题