Russ_AB
Russ_AB

Reputation: 105

Set a different destination folder structure than the source folder

I'm running a gulp task to minify and move JS files.

var js_modules       = 'application/modules/**/assets/js/*.js';
var js_dist_modules  = 'assets/js/modules/';

gulp.task('dev_scripts', function() {
    return gulp.src(js_modules)
        .pipe(plumber())
        .pipe(uglify())
        .pipe(gulp.dest(js_dist_modules));
});

With this task the output is:

Source:

application/modules/users/assets/js/users.js
application/modules/menu/assets/js/menu.js

Destination:

assets/js/modules/users/assets/js/users.js
assets/js/modules/menu/assets/js/menu.js

And I want the destinations to be:

assets/js/modules/users/users.js
assets/js/modules/menu/menu.js

How do I achiev that?

Upvotes: 1

Views: 109

Answers (2)

Mark
Mark

Reputation: 182821

Using gulp-flatten it appears something like this may work (untested):

var flatten= require('gulp-flatten);

var js_modules       = 'application/modules/**/assets/js/*.js';
var js_dist_modules  = 'assets/js/modules/';

gulp.task('dev_scripts', function() {
   return gulp.src(js_modules)
     .pipe(plumber())
     .pipe(uglify())
     .pipe(flatten({ subPath: [2, 1] } ))
     .pipe(gulp.dest(js_dist_modules));
});

You could play with the subPath numbers to get the third (2) or whichever subDirectory you want.

This answer is more general than the previous using rename in case your desired directories - in your case the glob ** - are not the same as files' basenames.

Upvotes: 0

TheDancingCode
TheDancingCode

Reputation: 942

I used gulp-rename:

var rename = require('gulp-rename');

var js_modules       = 'application/modules/**/assets/js/*.js';
var js_dist_modules  = 'assets/js/modules/';

gulp.task('dev_scripts', function() {
  return gulp.src(js_modules)
    .pipe(plumber())
    .pipe(uglify())
    .pipe(rename(function(file) {
      file.dirname = js_dist_modules + file.basename;
    }))
    .pipe(gulp.dest(.));
});

Upvotes: 1

Related Questions