Я пытаюсь организовать проект из рабочего каталога на сервер (на той же машине). Используя следующий код:
gulp.src([
'index.php',
'css/**',
'js/**',
'src/**',
])
.pipe(gulp.dest('/var/www/'));
Я ожидаю увидеть все скопированные файлы. Однако это выравнивает структуру dir - все каталоги копируются, но каждый файл помещается в корень/var/www
Gulp кажется отличным инструментом для сборки, но копирование элементов должно быть простым процессом?
deployment
gulp
M1ke
источник
источник
/var/www/
? Вы можете попробовать{css,js,src}/**/*
Ответы:
Следующее работает без выравнивания структуры папок:
Это
'**/*'
важная часть. Это выражение представляет собой глобус, который является мощным инструментом выбора файлов. Например, для копирования только файлов .js используйте:'input/folder/**/*.js'
источник
.pipe(gulp.dest('output/folder'));
{base:"."}
методом.base
умолчанию «папка», как указано в этом ответе. Другими словами, основание начинается там, где начинается шаблон глобуса. Это помогло мне понять , где мои файлы будут в конечном итоге , а также , почему вам не нужен**/*
вgulp.dest
параметре. Gulp берет все в глобус и помещает в папку dest с такой же структурой.Оказывается, что для копирования полной структуры каталогов
gulp
необходимо предоставить базу для вашегоgulp.src()
метода.Таким образом,
gulp.src( [ files ], { "base" : "." })
можно использовать в приведенной выше структуре для рекурсивного копирования всех каталогов.Если, как и я, вы можете забыть об этом, попробуйте:
источник
base
все еще смущает, взгляните на stackoverflow.com/a/35848322/11912, который отлично справляется с объяснением.Итак, решение обеспечения базы работает, учитывая, что все пути имеют один и тот же базовый путь. Но если вы хотите указать разные базовые пути, это все равно не сработает.
Одним из способов решения этой проблемы было создание относительного начала пути. Для вашего случая:
Причина, по которой это работает, заключается в том, что Gulp устанавливает основание как конец первого явного чанка - ведущий * заставляет его устанавливать основание на cwd (что является результатом, которого мы все хотим!)
Это работает, только если вы можете убедиться, что в структуре вашей папки не будет определенных путей, которые могут совпадать дважды. Например, если бы вы были
randomjs/
на том же уровне, чтоjs
и вы, в конечном итоге вы сопоставите оба.Это единственный способ, который я нашел, чтобы включить их как часть функции gulp.src верхнего уровня. Вероятно, было бы просто создать плагин / функцию, которая могла бы отделить каждый из этих глобусов, чтобы вы могли указать для них базовый каталог.
источник
However it flattens the dir structure - all directories are copied but every file is placed in the root /var/www
, и именно так я и нашел ваш вопрос - я искал решение о том, как рекурсивно копировать с разными базовыми путями. По сути, это решение работает для вашего случая, не требуя указания базы по умолчанию, но также для случая с несколькими базовыми путями, при условии, что вы можете быть уверены, что ведущая звезда ничего не соответствует :)'assets/subdir/*fonts/*'
скопировать шрифты DIR.Если вы хотите рекурсивно скопировать все содержимое папки в другую папку, вы можете выполнить следующую команду Windows из gulp:
/y
Вариант в конце, чтобы подавить сообщение перезаписи подтверждения.В Linux вы можете выполнить следующую команду из gulp:
Вы можете использовать gulp-exec или gulp-run плагин для выполнения системных команд из gulp.
Ссылки по теме:
использование xcopy
глоток и глоток
источник