Search code examples
gulp

TypeError: dest.on is not a function in gulp


When I edit theme .yml files in my themes source folder, I get this error. This does not happen when I edit scss or template .yml files from the template folder, only in the main folder. Others that had this error use things like webpack what I don't have. The gulp task for copy_theme_files is the same as other tasks with the difference that it has no return because I didn't know how to return there with two gulp.src functions.

gulp.task('copy_theme_files', function() {
    console.log('[copy_theme_files] Console Log: copy '+paths.themeSrc+' to '+paths.themeDest);
    gulp.src(paths.themeSrc)
        .pipe(gulp.dest(paths.themeDest));
    gulp.src(paths.root + '/*.{png,ico,svg}')
        .pipe(paths.themeDest);
});

Full gulpfile.js https://pastebin.com/NWt2uMwV

Error Output:

[00:37:58] Using gulpfile /var/www/themes.src/mytheme.src/gulpfile.js
[00:37:58] Starting 'watch'...
[00:38:20] Starting 'copy_theme_files'...
[copy_theme_files] Console Log: copy *.{yml,theme,php,png,jpg,gif,svg,ico},.gitkeep to build
[00:38:20] 'copy_theme_files' errored after 23 ms
[00:38:20] TypeError: dest.on is not a function
    at DestroyableTransform.Readable.pipe (/var/www/themes.src/mytheme.src/node_modules/readable-stream/lib/_stream_readable.js:564:8)
    at /var/www/themes.src/mytheme.src/gulpfile.js:122:10
    at taskWrapper (/var/www/themes.src/mytheme.src/node_modules/undertaker/lib/set-task.js:13:15)
    at bound (domain.js:395:14)
    at runBound (domain.js:408:12)
    at asyncRunner (/var/www/themes.src/mytheme.src/node_modules/async-done/index.js:55:18)
    at process._tickCallback (internal/process/next_tick.js:61:11)
[00:38:20] Starting 'copy_includes'...
[copy_includes] Console Log: copy includes/**/*.*,includes/**/.gitkeep to build/includes
[00:38:20] Finished 'copy_includes' after 7.41 ms
[00:38:20] Starting 'copy_build'...
[copy_build] Console Log: copy build/**/*.*,build/**/.gitkeep to ../../web/themes/local/mytheme
[00:38:20] Finished 'copy_build' after 60 ms

Other tasks run fine

[00:41:06] Starting 'copy_templates'...
[copy_templates] Console Log: copy templates/**/*.twig,templates/**/.gitkeep to build/templates
[00:41:08] Finished 'copy_templates' after 1.86 s
[00:41:08] Starting 'copy_build'...
[copy_build] Console Log: copy build/**/*.*,build/**/.gitkeep to ../../web/themes/local/mytheme
[00:41:09] Finished 'copy_build' after 326 ms

Solution

  • You have this line in your task:

    .pipe(paths.themeDest);
    

    You probably mean:

    .pipe(gulp.dest(paths.themeDest));
    

    For your other question look at merging two gulp.src streams for how to return:

    var merge = require('merge-stream');
    
    gulp.task('copy_theme_files', function() {
        console.log('[copy_theme_files] Console Log: copy '+paths.themeSrc+' to '+paths.themeDest);
    
        const themesStream = gulp.src(paths.themeSrc)
            .pipe(gulp.dest(paths.themeDest));
    
        const imagesStream = gulp.src(paths.root + '/*.{png,ico,svg}')
            .pipe(paths.themeDest);
    
        return merge(themesStream , imagesStream );
    });