Современная cборка Gulp 5 — удаление и копирование — 3 часть

В предыдущей статье (Современная cборка Gulp для веб-разработки — 2 часть) мы продолжили создавать современную сборку Gulp, используя ES-модули и строгий режим. Продолжим её совершенствовать.

Добавляем плагин del

Для очистки папки с результатами (./dist), чтобы в ней не скапливались уже удаленные с исходников и не нужные файлы, установим плагин del. Для этого в терминале наберём:

npm i -D del

В папке gulp/task создадим файл del.mjs

import { deleteAsync } from 'del';

export const del = () => {
  return deleteAsync('dist');
}

Импортируем эту задачу в gulpfile.js добавив строку:

import { del } from './gulp/tasks/del.mjs'; // удаление

и добавим задачу в сценарий:

// Определение сценария задач
const build = gulp.series(del, gulp.parallel(styles, scripts, html), gulp.parallel(serve, watch));

Добавление задачи копирования

Иногда нужно просто перенести файлы и/или папки как есть без изменений в папку с результатом.
Напишем для этого новую задачу.
Паку для этих целей назовём files и расположим в исходниках src/tiles.
Определим новые пути для копирования в файле gulp/config/path.js

...
files: {
  src: './src/files/**/*.*',
  dest: './dist/files'
}
...

В папке gulp/task создадаём файл copy.mjs

export const copyFiles = () => {
  return app.gulp.src(app.paths.copy.src, { encoding: false })
    .pipe(app.gulp.dest(app.paths.copy.dest))
}

Импортируем эту задачу в gulpfile.js добавив строку:

import { copyFiles } from './gulp/tasks/copy.mjs'; // копирование

Вставим нашу задачу в сценарий:

// Определение сценария задач
const build = gulp.series(del, copyFiles, gulp.parallel(styles, scripts, html), gulp.parallel(serve, watch));

Давайте будем следить за изменениями в папке srs/files и переносить новые файлы в dist/files прописав новую строку в наблюдателе:

// Отслеживание изменений
function watch() {
  ...
  gulp.watch(paths.copy.src, copyFiles);
}

Теперь добавляя файлы и папки в папку srs/files они буду автоматически переноситься в dist/files

Удаление без перезагрузки

Но сейчас при удалении файла с исходников, он останется в папке dist/files и удалится оттуда, только при перезапуске сборки.

Давайте сделам так, чтобы при удалении файла с исходников, он удалялся и из папки dist/files без перезапуска сборки.

Добавим в файл gulp/task/del.mjs еще одну задачу:

export const delFiles = () => {
  return deleteAsync(app.paths.copy.dest);
}

И в файле gulpfile.js пропишем её в импорте:

import { del, delFiles } from './gulp/tasks/del.mjs'; // удаление

Для удобства создадим переменную с серией задач (т.е. они будут выполнятся друг за другом):

const files = gulp.series(delFiles, copyFiles);

Заменим переменную copyFiles в наблюдателе на files:

// Отслеживание изменений
function watch() {
  ...
    gulp.watch(paths.copy.src, files);
}

Теперь все действия с файлами и папками в папке srs/files буду синхронизированы с папкой dist/files

Заключение

Мы продолжили создавать современную сборку Gulp и рассмотрели котирование и удаление файлов и папок с помощью плагина del.

P.S.

В следущей статье мы продолжем дополнять и совершенствовать эту сборку.

Продолжение следует.