设置与源文件夹不同的目标文件夹结构

时间:2017-05-08 16:02:05

标签: javascript gulp

我正在运行gulp任务来缩小和移动JS文件。

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

使用此任务,输出为:

来源:

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

目的地:

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

我希望目的地是:

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

我如何实现这一目标?

2 个答案:

答案 0 :(得分:1)

我使用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(.));
});

答案 1 :(得分:0)

使用gulp-flatten看起来像这样的东西可能有效(未经测试):

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

您可以使用子路径编号来获取所需的第三个(2)或任何子目录。

这个答案比以前使用重命名更通用,以防你想要的目录 - 在你的情况下是glob ** - 与文件的基本名称不同。