Как скопировать каталоги рекурсивно с помощью gulp?
Я пытаюсь создать проект из рабочего каталога на сервер (тот же компьютер). Используя следующий код:
gulp.src([
'index.php',
'css/**',
'js/**',
'src/**',
])
.pipe(gulp.dest('/var/www/'));
Я бы ожидал увидеть все скопированные файлы. Однако он выравнивает структуру dir - все каталоги копируются, но каждый файл помещается в корень /var/www
Gulp кажется отличным инструментом сборки, но копирование элементов должно быть простым процессом.
Ответы
Ответ 1
Оказывается, что для копирования полной структуры каталогов gulp
необходимо предоставить базу для вашего метода gulp.src()
.
Итак, gulp.src( [ files ], { "base" : "." })
можно использовать в структуре выше, чтобы скопировать все каталоги рекурсивно.
Если, как и я, вы можете это забыть, попробуйте:
gulp.copy=function(src,dest){
return gulp.src(src, {base:"."})
.pipe(gulp.dest(dest));
};
Ответ 2
Следующее работает без сглаживания структуры папок:
gulp.src(['input/folder/**/*']).pipe(gulp.dest('output/folder'));
'**/*'
- важная часть. Это выражение glob, которое является мощным инструментом выбора файлов. Например, для копирования только файлов .js используйте: 'input/folder/**/*.js'
Ответ 3
Итак, решение обеспечения базы работает, учитывая, что все пути имеют один и тот же базовый путь. Но если вы хотите предоставить различные базовые пути, это все равно не сработает.
Один из способов решить эту проблему состоял в том, чтобы сделать начало относительного пути.
Для вашего случая:
gulp.src([
'index.php',
'*css/**/*',
'*js/**/*',
'*src/**/*',
])
.pipe(gulp.dest('/var/www/'));
Причина, по которой это работает, заключается в том, что Gulp устанавливает базу как конец первого явного фрагмента - ведущая * заставляет ее устанавливать базу на cwd (что является результатом, которого мы все хотим!)
Это работает только в том случае, если вы можете убедиться, что ваша структура папок не будет иметь определенных путей, которые могли бы совпадать дважды. Например, если у вас есть randomjs/
на том же уровне, что и js
, вы в конечном итоге должны сопоставить оба.
Это единственный способ, который я нашел, чтобы включить их в часть функции gulp.src верхнего уровня. Скорее всего, было бы просто создать плагин/функцию, которая могла бы разделить каждый из этих глобусов, чтобы вы могли указать для них базовый каталог.
Ответ 4
Если вы хотите скопировать все содержимое папки рекурсивно в другую папку, вы можете выполнить следующую команду 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.
Ссылки по теме: