Gulp错误:监视任务必须是函数

ngynwnxp  于 2022-12-08  发布在  Gulp
关注(0)|答案(7)|浏览(153)

以下是我的吞咽档案:

// 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,但也不起作用。

webghufk

webghufk1#

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

thigvfpy2#

海湾-V4.0

现在回答这个问题有点晚了,但仍然。我也被困在这个问题中,这就是我如何让它工作的。x1c 0d1x
"详细分析我做错了什么"
1.当watch注意到我的html文件中有一些变化时,我忘记调用reload函数了。
1.由于fireUpKeepWatching是阻塞的,它们需要并行启动而不是串行启动,所以我在变量run中使用了parallel函数。

biswetbf

biswetbf3#

谢谢大家

gulp.task('watch', function(){
    gulp.watch('app/sass/**/*.sass', gulp.series('sass'));
});

适用于Gulp 4.xx版本

s3fp2yjn

s3fp2yjn4#

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

yizd12fk5#

//检查对我有效的方法

gulp.task('watch', function(){
    gulp.watch('css/shop.css', gulp.series(['shop']));
});
q9rjltbz

q9rjltbz6#

在我的情况下,为我工作:(在gulpfile.js中)(安装:大口地喝

var gulp = require('gulp');
var sass = require('gulp-sass')(require('sass'));

var cssDest = 'style';
var cssInputFile = 'source/style.scss';
var watchedFiles = 'source/**/*.scss';



gulp.task('buildcss', function(){
    return gulp.src(cssInputFile)
        .pipe(sass({
            outputStyle: 'compressed'
        }))
        .pipe(gulp.dest(cssDest));
});

gulp.task('watch', function(){
    gulp.watch(watchedFiles, gulp.series(['buildcss']));
});

荐:大口观看
(4.0版)

ghg1uchk

ghg1uchk7#

在我这边,我也不得不加上“{usePolling:true}”,以使其正常工作:

gulp.watch(paths.js_src + '/*.js', {usePolling: true}, gulp.series(projectScripts, ondemandProjectScripts))

我想这是因为我的代码运行到了一个Docker容器中。

相关问题