javascript - 大口错误 : watch task has to be a function

标签 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'));

如果我单独运行 imagesscriptscss 任务,它就可以工作。我必须在任务中添加 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)

我想是因为watch任务中也没有return。错误信息也不清楚——至少对我来说是这样。我尝试在最后一个 gulp.watch() 之后添加一个 return 但这也不起作用。

最佳答案

在 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'));
});

关于javascript - 大口错误 : watch task has to be a function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39665773/

相关文章:

javascript - 当我刷新页面时,angular4 css/js 不同

IE 中的 JavaScript 错误

gulp - 从Gulp调用 Electron

javascript - 两个不同的 Web 应用程序和一个源代码

javascript - 背景图像路径在使用gulp js的css文件中不起作用

javascript - 值被添加到数组中两次,我不明白为什么

javascript - 在 HTML 文件中包含 XML 内联

JavaScript 显示 Sq lite 数据插入错误

javascript - 使用 gulp 访问 typescript 文件变量值

javascript - 为 rewireify 创建 gulp 任务