Gulp 4 手表不工作,只有 运行 一次
Gulp 4 watch not working, only run one time
我从 Gulp 3 更改为 Gulp 4,但我无法让它工作。
当我 运行 gulp 并保存 SCSS 或 HTML 文件时,它会成功创建一个新文件。如果我再次保存,什么也不会发生。 只有运行个。
下面是我的gulpfile.js
'use strict';
var gulp = require('gulp');
var sass = require('gulp-sass');
var browserSync = require('browser-sync').create();
sass.compiler = require('node-sass');
gulp.task('sass', function() {
return gulp.src('template/assets/scss/**/*.scss')
.pipe(sass.sync({outputStyle: 'expanded'}).on('error', sass.logError))
.pipe(gulp.dest('template/assets/css/'))
.pipe(browserSync.stream());
});
// Static Server and watching scss/html files
gulp.task('server', gulp.series('sass', function(){
browserSync.init({
server: {
baseDir: "./template"
}
});
gulp.watch("template/assets/scss/**/*.scss", gulp.task('sass'));
gulp.watch("template/assets/scss/**/*.scss", browserSync.reload);
gulp.watch("template/**/*.html", browserSync.reload);
}));
gulp.task('watch', function() {
gulp.watch(['sass']);
});
gulp.task('default', gulp.series(gulp.parallel('sass', 'watch', 'server')))
您的 'watch' 任务是不必要的(语法错误):
gulp.task('watch', function() {
gulp.watch(['sass']);
});
所以删除它。您的 'server'
任务中已有 gulp.watch
语句:
gulp.watch("template/assets/scss/**/*.scss", gulp.task('sass'));
// gulp.watch("template/assets/scss/**/*.scss", browserSync.reload);
我把上面的第二个注释掉了,因为你已经调用了
.pipe(browserSync.stream());
在 'sass'
任务的末尾,因此注释掉的 browserSync.reload
行也是重复的。
你也需要在你的 'server' 任务中发出异步完成信号,看看我在哪里添加了 done
回调来做到这一点:
// Static Server and watching scss/html files
gulp.task('server', function (done) {
browserSync.init({
server: {
baseDir: "./template"
}
});
gulp.watch("template/assets/scss/**/*.scss", gulp.series('sass'));
// gulp.watch("template/assets/scss/**/*.scss", browserSync.reload);
gulp.watch("template/**/*.html", browserSync.reload);
done();
});
我从 'serve'
任务的开头删除了 gulp.series('sass')
调用,因为您已经在默认任务中首先调用了 'sass'
,因此在 'server'
任务。
另请注意在第一个手表中使用 gulp.series('sass')
而不是 gulp.task('sass')
。
最后,由于我们要删除单独的 'watch'
任务,因此将 'default' 任务更改为:
gulp.task('default', gulp.series('sass', 'server'));
并删除那里的 gulp.parallel
- 你只需要 'sass'
到 运行 在 'server'
.
之前
以下是所有更改:
// Static Server and watching scss/html files
gulp.task('server', function (done) {
browserSync.init({
server: {
baseDir: "./template"
}
});
gulp.watch("template/assets/scss/**/*.scss", gulp.series('sass'));
// gulp.watch("template/assets/scss/**/*.scss", browserSync.reload);
gulp.watch("template/**/*.html", browserSync.reload);
done();
}));
// gulp.task('watch', function() {
// gulp.watch(['sass']);
// });
gulp.task('default', gulp.series('sass', 'server'));
我从 Gulp 3 更改为 Gulp 4,但我无法让它工作。
当我 运行 gulp 并保存 SCSS 或 HTML 文件时,它会成功创建一个新文件。如果我再次保存,什么也不会发生。 只有运行个。
下面是我的gulpfile.js
'use strict';
var gulp = require('gulp');
var sass = require('gulp-sass');
var browserSync = require('browser-sync').create();
sass.compiler = require('node-sass');
gulp.task('sass', function() {
return gulp.src('template/assets/scss/**/*.scss')
.pipe(sass.sync({outputStyle: 'expanded'}).on('error', sass.logError))
.pipe(gulp.dest('template/assets/css/'))
.pipe(browserSync.stream());
});
// Static Server and watching scss/html files
gulp.task('server', gulp.series('sass', function(){
browserSync.init({
server: {
baseDir: "./template"
}
});
gulp.watch("template/assets/scss/**/*.scss", gulp.task('sass'));
gulp.watch("template/assets/scss/**/*.scss", browserSync.reload);
gulp.watch("template/**/*.html", browserSync.reload);
}));
gulp.task('watch', function() {
gulp.watch(['sass']);
});
gulp.task('default', gulp.series(gulp.parallel('sass', 'watch', 'server')))
您的 'watch' 任务是不必要的(语法错误):
gulp.task('watch', function() {
gulp.watch(['sass']);
});
所以删除它。您的 'server'
任务中已有 gulp.watch
语句:
gulp.watch("template/assets/scss/**/*.scss", gulp.task('sass'));
// gulp.watch("template/assets/scss/**/*.scss", browserSync.reload);
我把上面的第二个注释掉了,因为你已经调用了
.pipe(browserSync.stream());
在 'sass'
任务的末尾,因此注释掉的 browserSync.reload
行也是重复的。
你也需要在你的 'server' 任务中发出异步完成信号,看看我在哪里添加了 done
回调来做到这一点:
// Static Server and watching scss/html files
gulp.task('server', function (done) {
browserSync.init({
server: {
baseDir: "./template"
}
});
gulp.watch("template/assets/scss/**/*.scss", gulp.series('sass'));
// gulp.watch("template/assets/scss/**/*.scss", browserSync.reload);
gulp.watch("template/**/*.html", browserSync.reload);
done();
});
我从 'serve'
任务的开头删除了 gulp.series('sass')
调用,因为您已经在默认任务中首先调用了 'sass'
,因此在 'server'
任务。
另请注意在第一个手表中使用 gulp.series('sass')
而不是 gulp.task('sass')
。
最后,由于我们要删除单独的 'watch'
任务,因此将 'default' 任务更改为:
gulp.task('default', gulp.series('sass', 'server'));
并删除那里的 gulp.parallel
- 你只需要 'sass'
到 运行 在 'server'
.
以下是所有更改:
// Static Server and watching scss/html files
gulp.task('server', function (done) {
browserSync.init({
server: {
baseDir: "./template"
}
});
gulp.watch("template/assets/scss/**/*.scss", gulp.series('sass'));
// gulp.watch("template/assets/scss/**/*.scss", browserSync.reload);
gulp.watch("template/**/*.html", browserSync.reload);
done();
}));
// gulp.task('watch', function() {
// gulp.watch(['sass']);
// });
gulp.task('default', gulp.series('sass', 'server'));