这是我的gulpfile:
// Modules & Plugins
var gulp = require('gulp');
var concat = require('gulp-concat');
var myth = require('gulp-myth');
var uglify = require('gulp-uglify');
var jshint = require('gulp-jshint');
var imagemin = require('gulp-imagemin');
// Styles Task
gulp.task('styles', function() {
return gulp.src('app/css/*.css')
.pipe(concat('all.css'))
.pipe(myth())
.pipe(gulp.dest('dist'));
});
// Scripts Task
gulp.task('scripts', function() {
return gulp.src('app/js/*.js')
.pipe(jshint())
.pipe(jshint.reporter('default'))
.pipe(concat('all.js'))
.pipe(uglify())
.pipe(gulp.dest('dist'));
});
// Images Task
gulp.task('images', function() {
return gulp.src('app/img/*')
.pipe(imagemin())
.pipe(gulp.dest('dist/img'));
});
// Watch Task
gulp.task('watch', function() {
gulp.watch('app/css/*.css', 'styles');
gulp.watch('app/js/*.js', 'scripts');
gulp.watch('app/img/*', 'images');
});
// Default Task
gulp.task('default', gulp.parallel('styles', 'scripts', 'images', 'watch'));
如果我单独运行images
,scripts
或css
任务,则可以正常运行。我不得不在任务中添加return
- 这不在书中,但是谷歌搜索显示我需要这样做。
我遇到的问题是default
任务错误:
[18:41:59] Error: watching app/css/*.css: watch task has to be a function (optionally generated by using gulp.parallel or gulp.series)
at Gulp.watch (/media/sf_VM_Shared_Dev/webdevadvlocal/gulp/public_html/gulp-book/node_modules/gulp/index.js:28:11)
at /media/sf_VM_Shared_Dev/webdevadvlocal/gulp/public_html/gulp-book/gulpfile.js:36:10
at taskWrapper (/media/sf_VM_Shared_Dev/webdevadvlocal/gulp/public_html/gulp-book/node_modules/undertaker/lib/set-task.js:13:15)
at bound (domain.js:287:14)
at runBound (domain.js:300:12)
at asyncRunner (/media/sf_VM_Shared_Dev/webdevadvlocal/gulp/public_html/gulp-book/node_modules/async-done/index.js:36:18)
at nextTickCallbackWith0Args (node.js:419:9)
at process._tickCallback (node.js:348:13)
at Function.Module.runMain (module.js:444:11)
at startup (node.js:136:18)
我认为这是因为监视任务中也没有return
。错误信息也不清楚 - 至少对我而言。我尝试在最后一次return
之后添加gulp.watch()
,但这也不起作用。
答案 0 :(得分:217)
在gulp 3.x中,您可以将任务名称传递给gulp.watch()
,如下所示:
gulp.task('watch', function() {
gulp.watch('app/css/*.css', ['styles']);
gulp.watch('app/js/*.js', ['scripts']);
gulp.watch('app/img/*', ['images']);
});
在gulp 4.x中,情况不再如此。您有来传递功能。在gulp 4.x中执行此操作的常规方法是仅使用一个任务名称传递gulp.series()
调用。这将返回仅执行指定任务的函数:
gulp.task('watch', function() {
gulp.watch('app/css/*.css', gulp.series('styles'));
gulp.watch('app/js/*.js', gulp.series('scripts'));
gulp.watch('app/img/*', gulp.series('images'));
});
答案 1 :(得分:14)
<强> GULP-V4.0 强>
现在回答这个问题有点晚了但仍然如此。我也遇到了这个问题,这就是我的工作方式。
详细分析我做错了什么
watch
发现我的html文件发生了一些变化时,我忘了调用重装功能。fireUp
和KeepWatching
正在阻止。它们需要并行启动而不是串行启动。所以我在变量run中使用了parallel函数。答案 2 :(得分:11)
感谢所有人
gulp.task('watch', function(){
gulp.watch('app/sass/**/*.sass', gulp.series('sass'));
});
版本gulp 4.xx
答案 3 :(得分:2)
它在Gulp 4.0中对我有用
gulp.task('watch', function() {
gulp.watch('src/images/*.png', gulp.series('images'));
gulp.watch('src/js/*.js', gulp.series('js'));
gulp.watch('src/scss/*.scss', gulp.series('css'));
gulp.watch('src/html/*.html', gulp.series('html'));
});
答案 4 :(得分:0)
//检查对我有用的
gulp.task('watch', function(){
gulp.watch('css/shop.css', gulp.series(['shop']));
});