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