Gulp 大口大口地看一次
我正在使用这个大口手表样本: 当我在Windows 8计算机上运行它时,它仅在我第一次更改文件时运行:Gulp 大口大口地看一次,gulp,gulp-watch,Gulp,Gulp Watch,我正在使用这个大口手表样本: 当我在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] Finish
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
下次什么都没发生。为什么?如果仔细阅读文档,您会看到以下短语: 您可以传递普通回调,该回调将在每个事件上调用,或者将其包装在gulp批处理中以运行一次 所以,基本上就是对
大口大口喝的处理。要经常观看,只需删除批处理调用:
gulp.task('build', function (done) {
console.log('Working!');
done();
});
gulp.task('watch', function () {
watch('app/*.js', function () {
gulp.start('build');
});
});
(并将'done'回调添加到build
,以便在完成时让Gulp知道)
顺便说一句。。。我不确定,但我认为,gulpwatch
不仅可以查看文件,还可以直接返回一个乙烯基对象。因此,实际上使用内置的gulp.watch应该具有相同的效果:
gulp.task('watch', function () {
gulp.watch('app/**/*.js', ['build']);
});
我有同样的问题,并使用相同的ddprrt。区别在于使用目录通配符作为绝对路径
我改变了这一点:
gulp.task('watch', function() {
gulp.watch('sass/shortcutcss/*.scss', ['sass'])
});
为此:
gulp.task('watch', function() {
gulp.watch('sass/**/*.scss', ['sass'])
});
这个问题让我疯狂了一个周末。我尝试了所有:
- 添加完成()-事件
- 重命名/触摸/清除目标CSS
- 对文件路径要更加具体
但是(这个问题的原因和)解决方案是如此简单,以至于在那之后我感到很可怜:
只是,我的是0.12.x!难怪这不起作用
之后,观看活动再次开始。有时它也会再次出错。但在这种情况下,只需再次保存文件,它就会被识别。(我想,foundation/gulp watch
会检查对fast的更改,当您的文件被新上传的文件替换时)对我来说,它是在任务中添加了一个“返回”:
gulp.task('styles', function(){
return gulp.src('css/styles.css')
.pipe(autoprefixer())
.pipe(gulp.dest('build'));
});
说来话长:
对我来说,它很长时间都不起作用。看起来一切正常,但只运行一次
但突然间,我开始在另一个项目中使用parcel js,同样的事情发生在他们的内置手表上。所以我寻找答案,发现问题出在我的Vim设置上
回答:帮助我的是来自@acobster的这个
简而言之:
通过添加set backupcopy=yes
更新.vimrc
,您是否更改了任何文件?因为当您执行gulp watch时,它正在监视文件。当你更改一个文件时,watch中的函数会被激活。是的,也许我不够清楚。我正在更改文件,但只有在我第一次更改文件时才执行监视。例如,如果我启动gulp watch
,更改*.js文件中的某些内容并保存它,则watch正在运行。如果我在同一个文件中更改了其他内容并再次保存,那么watch将不会运行。gulp watch
进程仍在运行,但什么也没发生。如果您仍想使用gulp批处理
正确用法是在那里进行done
回调:done
-是对批处理函数信号的回调,表示您完成了。所以:gulp.task('watch',function(){watch('***.js',batch(function(events,done){gulp.start('build');done();}));})代码>相同的问题和相同的解决方案。也许在github上打开一个关于这个的问题会是一个好主意。我也有同样的问题,并通过添加通配符目录解决了它/***.scss,现在看来这个问题仍然相关。/***/通配符dir解决了我的问题。我必须对目录使用**
通配符,对文件名使用*
通配符。我不能使用确切的目录和文件名,奇怪!旧帖子,但让我再次引用@ddprrt所说的内容,(并添加“完成”回调来构建,以便在完成时让Gulp知道)。
这几乎让我在墙上撞了几个小时。感谢manstarting with gulp 4,看来,done
回调是必须的,thx!。。。或者传递并调用回调:(cb)=>{something();cb();}
gulp.task('styles', function(){
return gulp.src('css/styles.css')
.pipe(autoprefixer())
.pipe(gulp.dest('build'));
});