Gulp只看运行一次
Gulp Watch only run once
我正在使用这个 Gulp 观看示例: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 机器上时,我第一次更改文件时只需要 运行s:
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
下次什么都不会发生。为什么?
如果您仔细阅读文档,您会看到以下短语:
You can pass plain callback, that will be called on every event or wrap it in gulp-batch to run it once
所以,这基本上就是 gulp-batch
的交易。要持续观看,只需删除批处理调用:
gulp.task('build', function (done) {
console.log('Working!');
done();
});
gulp.task('watch', function () {
watch('app/*.js', function () {
gulp.start('build');
});
});
(并将 'done' 回调添加到 build
以让 Gulp 知道您何时完成。
顺便说一句...我不确定,但我认为 gulp-watch
不仅可以观看文件,还可以直接返回乙烯基对象。所以实际使用内置的 gulp.watch
应该有相同的效果:
gulp.task('watch', function () {
gulp.watch('app/**/*.js', ['build']);
});
这似乎是 known issue
我有同样的问题并使用与 ddprrt 相同的方法。不同之处在于使用目录 glob(通配符)而不是绝对路径。
我改变了这个:
gulp.task('watch', function() {
gulp.watch('sass/shortcutcss/*.scss', ['sass'])
});
对此:
gulp.task('watch', function() {
gulp.watch('sass/**/*.scss', ['sass'])
});
这个问题让我疯狂了一个周末。我都试过了:
- 添加 done()-事件
- Rename/Touch/Clear 目标 CSS
- 文件路径更具体
但是(这个问题的原因和)解决方案是如此简单,以至于在那之后我感到可悲:
只是 update your nodejs installation,我的是 0.12.x!难怪这不起作用。
之后 watch 事件再次运行。有时它也会再次出错。但在这种情况下,只需再次保存您的文件,它就会被识别。 (我认为 foundation/gulp watch
快速检查更改,同时您的文件被新上传的文件替换)
对我来说,它是在任务中添加 "return":
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 观看示例: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 机器上时,我第一次更改文件时只需要 运行s:
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
下次什么都不会发生。为什么?
如果您仔细阅读文档,您会看到以下短语:
You can pass plain callback, that will be called on every event or wrap it in gulp-batch to run it once
所以,这基本上就是 gulp-batch
的交易。要持续观看,只需删除批处理调用:
gulp.task('build', function (done) {
console.log('Working!');
done();
});
gulp.task('watch', function () {
watch('app/*.js', function () {
gulp.start('build');
});
});
(并将 'done' 回调添加到 build
以让 Gulp 知道您何时完成。
顺便说一句...我不确定,但我认为 gulp-watch
不仅可以观看文件,还可以直接返回乙烯基对象。所以实际使用内置的 gulp.watch
应该有相同的效果:
gulp.task('watch', function () {
gulp.watch('app/**/*.js', ['build']);
});
这似乎是 known issue 我有同样的问题并使用与 ddprrt 相同的方法。不同之处在于使用目录 glob(通配符)而不是绝对路径。
我改变了这个:
gulp.task('watch', function() {
gulp.watch('sass/shortcutcss/*.scss', ['sass'])
});
对此:
gulp.task('watch', function() {
gulp.watch('sass/**/*.scss', ['sass'])
});
这个问题让我疯狂了一个周末。我都试过了:
- 添加 done()-事件
- Rename/Touch/Clear 目标 CSS
- 文件路径更具体
但是(这个问题的原因和)解决方案是如此简单,以至于在那之后我感到可悲:
只是 update your nodejs installation,我的是 0.12.x!难怪这不起作用。
之后 watch 事件再次运行。有时它也会再次出错。但在这种情况下,只需再次保存您的文件,它就会被识别。 (我认为 foundation/gulp watch
快速检查更改,同时您的文件被新上传的文件替换)
对我来说,它是在任务中添加 "return":
gulp.task('styles', function(){
return gulp.src('css/styles.css')
.pipe(autoprefixer())
.pipe(gulp.dest('build'));
});
长话短说:
对我来说,它没有工作很长时间。一切似乎都设置正确,但 运行 只有一次。
但突然间我开始在另一个项目中使用 parcel js,他们的内置手表也发生了同样的事情。所以我寻找答案,发现问题出在我的 Vim 设置上。
回答对我有帮助的是@acobster
简而言之:
通过添加 set backupcopy=yes
.vimrc