Gulp错误:监视任务必须是一个功能

Arn*_*mer 96 javascript gulp

这是我的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'));
Run Code Online (Sandbox Code Playgroud)

如果我运行images,scriptscss单独的任务它的工作原理.我不得不添加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)
Run Code Online (Sandbox Code Playgroud)

我认为这是因为return手表任务中也没有.错误信息也不清楚 - 至少对我而言.我尝试return在最后一次之后添加一个gulp.watch()但是也没用.

Sve*_*ung 287

在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']);
});
Run Code Online (Sandbox Code Playgroud)

在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'));
});
Run Code Online (Sandbox Code Playgroud)

  • 所以一系列功能......有点奇怪不是吗? (10认同)
  • 一直被困住,直到我意识到 `gulp.series('styles'));` 中的 `styles` 是一个函数。就我而言,我将“sass”定义为函数,但我将“()”中的内容作为目的地。对于任何遵循“Gulp for Beginners”教程并陷入困境的人,解决方法是将行 `gulp.watch('app/scss/**/*.scss', ['sass']);` 替换为 `gulp .watch('app/sass/**/*.sass', gulp.series('sass'));` (2认同)

caf*_*991 16

GULP-V4.0

现在回答这个问题有点晚了但仍然如此.我也遇到了这个问题,这就是我的工作方式. Gulp结构

详细分析我做错了什么

  1. watch我注意到我的html文件中的一些变化时,我忘了调用重载功能.
  2. 既然fireUp而且KeepWatching正在封锁.它们需要并行启动而不是串行启动.所以我在变量run中使用了parallel函数.


小智 15

谢谢大家

gulp.task('watch', function(){
    gulp.watch('app/sass/**/*.sass', gulp.series('sass'));
});
Run Code Online (Sandbox Code Playgroud)

对于版本gulp 4.xx