Это return ['fonts', 'images', 'scripts']
просто возвращает массив строк, которого недостаточно.
Посмотрите на объединить поток и https://mariusschulz.com/blog/merging-two-gulp-streams, чтобы фактически вернуть потоки .
const merge = require('merge-stream');
gulp.task('copy:default', () => {
const fonts = gulp.src(['src/fonts/**/*'])
.pipe(gulp.dest('dist/fonts'));
const images = gulp.src(['src/images/**/*'])
.pipe(gulp.dest('dist/images'));
const scripts = gulp.src(['src/scripts/**/*'])
.pipe(gulp.dest('dist/scripts'));
// return ['fonts', 'images', 'scripts']
return merge(fonts, images, scripts);
});
или
gulp.task('copy:default', () => {
return merge(
gulp.src(['src/fonts/**/*'])
.pipe(gulp.dest('dist/fonts')),
gulp.src(['src/images/**/*'])
.pipe(gulp.dest('dist/images')),
gulp.src(['src/scripts/**/*'])
.pipe(gulp.dest('dist/scripts'))
);
});