Gulp hatası: izle görevi bir işlev olmalı


126

İşte benim 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'));

Koşarsam images, scriptsya csstek başına görev çalışır. returnGörevlere eklemek zorunda kaldım - bu kitapta yoktu ama googling bana bunun gerekli olduğunu gösterdi.

Sahip olduğum sorun, defaultgörev hataları:

[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)

Bence returnsaat görevinde de yok çünkü . Ayrıca hata mesajı net değil - en azından benim için. Sonuncudan returnsonra bir eklemeyi denedim gulp.watch()ama bu da işe yaramadı.

Yanıtlar:


355

Yudum 3.x'te, bir görevin adını şöyle iletebilirsiniz gulp.watch():

gulp.task('watch', function() {
  gulp.watch('app/css/*.css', ['styles']);
  gulp.watch('app/js/*.js', ['scripts']);
  gulp.watch('app/img/*', ['images']);
});

Yudum 4.x'te artık durum böyle değil. Sen sahip bir işlev geçmek. Bunu gulp 4.x'te yapmanın alışılagelmiş yolu, gulp.series()yalnızca bir görev adıyla bir çağrı geçirmektir . Bu, yalnızca belirtilen görevi yürüten bir işlev döndürür:

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

13
Yani bir dizi tek işlev ... biraz tuhaf değil mi?
MonsieurNinja

Teşekkürler ... // gulp.task ('izle', function () {gulp.watch ('src / images / *. Png', gulp.series ('görüntüler')); gulp.watch ('src /js/*.js ', gulp.series (' js ')); gulp.watch (' src / scss / *. scss ', gulp.series (' css ')); gulp.watch (' src / html /*.html ', gulp.series (' html '));});
Wasim Khan

1
Ben fark kadar Got sıkışmış stylesiçinde gulp.series('styles'));bir fonksiyondur. Benim durumumda sassbir fonksiyon olarak tanımlamıştım ama içinde olanı ( )hedef olarak aldım . Öğreticiler "Yeni başlayanlar için Gulp" Aşağıdaki herkes için ve saplanıp, düzeltme hattını değiştirmektir gulp.watch('app/scss/**/*.scss', ['sass']);ilegulp.watch('app/sass/**/*.sass', gulp.series('sass'));
yCode

Btw gulp.watch('app/sass/**/*.sass', gulp.series('sass'));ile farkı nedir gulp.watch('app/sass/**/*.sass', gulp.series['sass']);? Her iki çizgiyi de test ettim ve hiçbir değişiklik görmedim, ancak bir fark olduğundan eminim (bu daha sonra beni rahatsız edecek).
YCode

19

her şey için teşekkürler

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

gulp 4.xx sürümü için


O olmalıgulp.series('sass')
Tony Bui

Hayır, tek bir görevi ise dizi olması gerekmez.
Vortilion

19

GULP-V4.0

Şu anda bunu cevaplamak için biraz geç ama yine de. Ben de bu soruna takılı kaldım ve bu şekilde çalıştırdım. Gulp yapısı

Ayrıntılı analizde neyi yanlış yaptığımı

  1. watchHtml dosyalarımda bazı değişiklikler fark ettiğimde yeniden yükleme işlevini çağırmayı unuttum .
  2. O zamandan beri fireUpve KeepWatchingengelliyorlar. Seri olarak değil paralel olarak başlatılmaları gerekir. Bu yüzden değişken çalışmasında paralel işlevi kullandım.

4

Gulp 4.0'da benim için çalıştı

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

0

// Benim için neyin işe yaradığını kontrol edin

gulp.task('watch', function(){
    gulp.watch('css/shop.css', gulp.series(['shop']));
});
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.