गुल त्रुटि: घड़ी का कार्य एक कार्य होना चाहिए


125

यहाँ मेरा 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'));

अगर मैं चलाने images, scriptsया cssयह काम करता है काम अकेले। मुझे 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वॉच टास्क में भी ऐसा नहीं है। इसके अलावा त्रुटि संदेश स्पष्ट नहीं है - कम से कम मेरे लिए। मैंने returnआखिरी के बाद जोड़ने की कोशिश की gulp.watch()लेकिन वह भी काम नहीं किया।

जवाबों:


352

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

13
तो एक समारोह की एक श्रृंखला ... थोड़ा अजीब है ना?
महाशय

धन्यवाद ... // घड़ी gulp.task ('घड़ी', फ़ंक्शन () {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 '));});
वसीम खान

1
जब तक मुझे एहसास हुआ stylesकि gulp.series('styles'));यह एक फंक्शन है। मेरे मामले में, मैंने sassएक फ़ंक्शन के रूप में परिभाषित किया था , लेकिन मैंने वही लिया जो ( )एक गंतव्य के रूप में था । निम्नलिखित ट्यूटोरियल "शुरुआती Gulp" किसी के लिए भी और अटक गया, ठीक लाइन को बदलने के लिए है gulp.watch('app/scss/**/*.scss', ['sass']);के साथgulp.watch('app/sass/**/*.sass', gulp.series('sass'));
YCode

क्या अंतर है btw gulp.watch('app/sass/**/*.sass', gulp.series('sass'));और gulp.watch('app/sass/**/*.sass', gulp.series['sass']);? मैंने दोनों लाइनों का परीक्षण किया और कोई बदलाव नहीं देखा, लेकिन मुझे यकीन है कि एक अंतर है (जो बाद में मुझे परेशान करेगा)।
YCode

18

सबको धन्यवाद

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

संस्करण gulp 4.xx के लिए


यह होना चाहिएgulp.series('sass')
टोनी बुई

नहीं, अगर यह सिर्फ एक काम है तो इसे एक श्रृंखला होने की आवश्यकता नहीं है।
Vortilion

18

Gulp-V4.0

अभी इसका उत्तर देना थोड़ा देर से है लेकिन अभी भी है। मैं इस समस्या में भी फंस गया था और मुझे यह काम करने का तरीका मिल गया। गुल की संरचना

विस्तार से विश्लेषण में कि मैं क्या गलत कर रहा था

  1. जब watchमैंने अपने html फाइलों में कुछ बदलावों को देखा तो मैं पुनः लोड फ़ंक्शन को कॉल करना भूल गया ।
  2. चूंकि fireUpऔर KeepWatchingअवरुद्ध कर रहे हैं। उन्हें सिलसिलेवार होने की बजाय समानांतर रूप से शुरू करने की जरूरत है। इसलिए मैंने चर रन में समानांतर फ़ंक्शन का उपयोग किया।

4

इसने मेरे लिए गुल 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'));
});

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.