2016-09-23 22 views
5

這裏是我的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) 

我想這是因爲也有在手錶任務沒有return。此外,錯誤信息還不清楚 - 至少對我而言。我在最後的gulp.watch()之後嘗試添加return,但那也不起作用。

回答

20

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

在一飲而盡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')); 
}); 
+0

很好,固定它!感謝您的更快答案。 –

+1

所以一系列的功能......有點奇怪不是嗎? – MonsieurNinja

3

GULP-V4.0

這是一個有點晚了,但現在還是要回答這個權利。我被困在這個問題中,這就是我如何運作的。 Gulp structure

在詳細分析我在做什麼錯誤

  1. 我忘了打電話的重載功能當手表注意到我的HTML文件的一些變化。
  2. 現在由於fireUpKeepWatching任務都是需要的,並且它們是阻塞的。它們需要並行而不是串行啓動。所以我在變量運行中使用了並行函數。