Используя конкретный пример, который вы дали, вы можете легко получить желаемый эффект:
gulp.src('source/singletonComponents/images/icons/**/*.+(png|jpg|gif|svg)')
.pipe(gulp.dest('dest/pictures/icons'));
Шаблон выше меняет то, что хранится в поле relative
файлов. Теперь все они относятся к source/singletonComponents/images/icons/
, что позволяет вам в gulp.dest
изменить путь, чтобы получить желаемый результат.
Если ваша реальная ситуация более сложна, вы можете сами управлять путями через pipe
:
const gulp = require("gulp");
const map = require("map-stream");
const path = require("path");
gulp.task("default", () =>
gulp.src('source/singletonComponents/**/*.+(png|jpg|gif|svg)')
.pipe(map((file, cb) => {
file.path = path.join(file.base, file.relative.replace(/images/, "pictures"));
cb(null, file);
}))
.pipe(gulp.dest('dest')));
Обратите внимание, что Gulp 4 не позволяет изменять file.relative
напрямую. Вы получите ошибку, если попытаетесь это сделать. Это потому, что оно получено из file.base
и file.path
. Поэтому вы должны изменить один из них или оба, если вы хотите изменить file.relative
. Помните, что file.path
- это абсолютный путь к файлу. Вот почему мы объединяем file.base
с измененным значением file.relative
.