makenova makenova - 5 months ago 15
Node.js Question

Use gulp to select and move directories and their files

I'm currently using gulp to call a bash script that cleans my

dist/
directory and moves the appropriate files to the clean directory. I would like this to be done with gulp because I am not sure the script would work on a non *nix file system.

So far, I'm using the gulp-clean module to clean the
dist/
directory but when I try to move the required directories and their files to the dist folder, the directories are empty.

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']);


calling
gulp dist
results in the the
dist/
directory being populated with the correct directories but they are all empty

$ ls dist/*
dist/manifest.json

dist/_locales:

dist/icons:

dist/page_action:


How do I copy the directories and their contents to the
dist/
folder?

Answer

You need to include the base option to src, which will preserve the file structure the way you want:

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'));
});

Also, you are probably going to have trouble down the road if you have all these source files in the root of your project.

If you can, I'd recommend you use a single src/ folder and move all your application-specific files into there. This makes maintenance easier moving forward, and prevents your build-specific files from getting mixed up with your application-specific files.

If you do this, then simply replace all occurrences of ./ with src/ in the example above.

Comments