2014-02-04 5 views
88

В настоящее время я использую gulp для вызова сценария bash, который очищает мой каталог dist/ и перемещает соответствующие файлы в чистый каталог. Я бы хотел, чтобы это было сделано с помощью gulp, потому что я не уверен, что скрипт будет работать в файловой системе non * nix.
До сих пор я использую модуль gulp-clean для очистки каталога dist/, но когда я пытаюсь переместить необходимые каталоги и их файлы в папку dist, каталоги пусты.Используйте gulp для выбора и перемещения каталогов и их файлов

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/?

ответ

145

Вы должны включить base option в ЦСИ, который будет сохранять структуру файла, как вы хотите:

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/ в приведенном выше примере.

+1

работал отлично только после того, как реорганизовать файлы, но ваши рассуждения звучат так я ваша маркировка ответьте как правильно. Спасибо. – makenova

+1

Я рад, что это помогло! – OverZealous

+2

Чтобы сделать наоборот, используйте gulp-flatten. http://stackoverflow.com/questions/21153338/flatten-glob-down-to-one-directory?rq=1 –

1

Первоначальные цели вопрос только каталоги (также известные папки) в его gulp.src, т.е. gulp.src(['_locales', ... в этом примере, _locales это имя каталога .

Принятый ответ использует в своей gulp.src в glob pattern целевую файлов где-нибудь в этих каталогах, т.е. gulp.src(['./_locales/**/*.*', ..., (обратите внимание на двойных звездочек, и filename.extension звездочек). Принятый ответ работает ...

... но принятый ответ лишь подчеркивает base варианта:

Вам необходимо включить base вариант в Src ...

я экспериментировал и нашел:

  1. Строго говоря, нет необходимости использовать опцию base для достижения того, что ОП задал: «...и перемещает соответствующие файлов к чистой директории.»The base варианта делает действительно сохранить папку + файлструктуру (как описано в принятом ответе), но вариант base является не достаточно двигаться файлы как OP спросил. Сохранение структуры папок + файл, вероятно, что ОП ожидает, поэтому принятый ответ хорош, но ...

  2. Просто повторить то, что делает переместить файлы, это glob модели:

    1. Дважды звездочка (.../**/...) ищет рекурсивно во всех вложенных папках, и вложенные папки вложенные папки и т.д.

    2. filename.extension звездочками (.../*.*) находит файлов всего имена, и все расширения. Итак, я считаю, что эта часть заслуживает наибольшего внимания!

  3. Принимаемый ответ меняет что-то еще; он добавляет префикс ./ к каждому аргументу пути, переданному в gulp.src. Я думаю, что это лишнее/избыточное; если нет ./ (как в вопросе OP), пути разрешаются относительно текущего каталога - , что приводит к такому же поведению. Но, возможно, это хорошая практика, чтобы быть явными с ./

Позвольте мне знать, если я ошибаюсь ...