Как мне рекурсивно копировать каталоги с помощью gulp?
Я пытаюсь организовать проект из рабочей директории на сервер (на той же машине). Используя следующий код:
gulp.src([
'index.php',
'css/**',
'js/**',
'src/**',
])
.pipe(gulp.dest('/var/www/'));
Я ожидаю увидеть все скопированные файлы. Однако это выравнивает структуру dir - все каталоги копируются, но каждый файл помещается в корень /var/www
Gulp кажется отличным инструментом для сборки, но копирование элементов должно быть простым процессом?
4 ответа
Оказывается, чтобы скопировать полную структуру каталогов gulp
необходимо обеспечить базу для вашего gulp.src()
метод.
Так gulp.src( [ files ], { "base" : "." })
может использоваться в приведенной выше структуре для рекурсивного копирования всех каталогов.
Если, как и я, вы можете забыть об этом, попробуйте:
gulp.copy=function(src,dest){
return gulp.src(src, {base:"."})
.pipe(gulp.dest(dest));
};
Следующее работает без выравнивания структуры папок:
gulp.src(['input/folder/**/*']).pipe(gulp.dest('output/folder'));
'**/*'
это важная часть. Это выражение является глобусом, который является мощным инструментом выбора файлов. Например, для копирования только файлов.js используйте: 'input/folder/**/*.js'
Итак, решение обеспечения базы работает, учитывая, что все пути имеют одинаковый базовый путь. Но если вы хотите указать разные базовые пути, это все равно не сработает.
Одним из способов решения этой проблемы было создание относительного начала пути. Для вашего случая:
gulp.src([
'index.php',
'*css/**/*',
'*js/**/*',
'*src/**/*',
])
.pipe(gulp.dest('/var/www/'));
Причина, по которой это работает, заключается в том, что Gulp устанавливает основание как конец первого явного чанка - ведущий * заставляет его устанавливать основание на cwd (что является результатом, которого мы все хотим!)
Это работает, только если вы можете убедиться, что в структуре вашей папки не будет определенных путей, которые могут совпадать дважды. Например, если у вас было randomjs/
на том же уровне, что и js
, вы бы в конечном итоге сопоставить оба.
Это единственный способ, который я нашел, чтобы включить их как часть функции gulp.src верхнего уровня. Вероятно, было бы просто создать плагин / функцию, которая могла бы выделить каждый из этих глобусов, чтобы вы могли указать для них базовый каталог.
Если вы хотите рекурсивно скопировать все содержимое папки в другую папку, вы можете выполнить следующую команду Windows из gulp:
xcopy /path/to/srcfolder /path/to/destfolder /s /e /y
/y
опция в конце состоит в том, чтобы подавить сообщение подтверждения перезаписи.
В Linux вы можете выполнить следующую команду из gulp:
cp -R /path/to/srcfolder /path/to/destfolder
Вы можете использовать плагин gulp-exec или gulp-run для выполнения системных команд из gulp.
Ссылки по теме: