Используйте gulp для выбора и перемещения каталогов и их файлов
В настоящее время я использую gulp для вызова bash script, который очищает мой каталог dist/
и перемещает соответствующие файлы в чистый каталог. Я хотел бы, чтобы это выполнялось с помощью gulp, потому что я не уверен, что script будет работать с файловой системой non * nix.
До сих пор я использую модуль gulp -clean для очистки каталога dist/
, но когда я пытаюсь переместить необходимые каталоги и их файлы в папку dist, каталоги пусты.
var gulp = require('gulp'),
clean = require('gulp-clean');
gulp.task('clean', function(){
return gulp.src(['dist/*'], {read:false})
.pipe(clean());
});
gulp.task('move',['clean'], function(){
gulp.src(['_locales', 'icons', 'src/page_action', 'manifest.json'])
.pipe(gulp.dest('dist'));
});
gulp.task('dist', ['move']);
вызов gulp dist
приводит к тому, что каталог dist/
заполняется правильными каталогами, но все они пусты
$ ls dist/*
dist/manifest.json
dist/_locales:
dist/icons:
dist/page_action:
Как скопировать каталоги и их содержимое в папку dist/
?
Ответы
Ответ 1
Вам нужно включить опцию base
в src, которая сохранит файловую структуру так, как вы хотите:
var filesToMove = [
'./_locales/**/*.*',
'./icons/**/*.*',
'./src/page_action/**/*.*',
'./manifest.json'
];
gulp.task('move',['clean'], function(){
// the base option sets the relative root for the set of files,
// preserving the folder structure
gulp.src(filesToMove, { base: './' })
.pipe(gulp.dest('dist'));
});
Кроме того, у вас, вероятно, будут проблемы в будущем, если у вас есть все эти исходные файлы в корне вашего проекта.
Если вы можете, я бы порекомендовал вам использовать одну папку src/
и переместить туда все файлы, относящиеся к вашему приложению. Это облегчает обслуживание и предотвращает перепутывание файлов, специфичных для сборки, с файлами, специфичными для приложения.
Если вы сделаете это, просто замените все вхождения ./
на src/
в примере выше.
Ответ 2
Исходный вопрос предназначен только для каталогов (или папок) в его gulp.src
, т.е. gulp.src(['_locales',...
в этом примере _locales
- это имя каталога.
Принятый ответ использует шаблон glob
в своем gulp.src
для нацеливания файлов в любом месте этих каталогов, т.е. gulp.src(['./_locales/**/*.*',...
, (обратите внимание на двойные звездочки, и имя файла. Расширение звездочки). Принятый ответ работает...
... но принятый ответ только подчеркивает base
вариант:
Вам нужно включить опцию base
в src...
Я экспериментировал и обнаружил:
-
Строго говоря, нет необходимости использовать base
опцию для достижения того, о чем спрашивает ОП: "... и перемещает соответствующие файлы в чистый каталог". base
вариант действительно сохраняет структуру папок + файл (как описано в принятом ответе), но base
вариант не является достаточным, чтобы переместить файлы, как просили ОП. Сохранение структуры папок и файлов - это, вероятно, то, что ожидает OP, поэтому принятый ответ хорош, но...
-
Просто чтобы повторить то, что перемещает файлы, это шаблоны glob
:
-
Двойная звездочка (.../**/...
) выполняет рекурсивный поиск во всех подпапках, подпапках "подпапках" и т.д.
-
Звездочки имени файла .extension(.../*.*
) Находит файлы всех имен и всех расширений. Поэтому я думаю, что эта часть заслуживает наибольшего внимания!
-
Принятый ответ меняет что-то еще; он добавляет префикс ./
к каждому аргументу пути, передаваемому в gulp.src
. Я считаю это ненужным/излишним; если нет ./
(как в вопросе OP), пути разрешаются относительно текущего каталога, что приводит к тому же поведению. Но, может быть, это хорошая практика, чтобы быть явным с ./
Дайте мне знать, если я ошибаюсь...