使用Gulp基于目录名连接和重命名文件

时间:2017-08-01 19:55:30

标签: javascript gulp concatenation gulp-concat

我正在尝试设置gulpfile.js以连接我的.js文件夹中的所有src/js文件,并根据其父文件夹命名它们。

文件夹结构示例:

project
|
+-assets
| |
| +-app.min.js
| |
| +-vendor.min.js
|
+-src
| |
| +-app
| | |
| | +-file1.js
| | |
| | +-file2.js
| |
| +-vendor
| | |
| | +-file1.js
| | |
| | +-file2.js

我可以为特定文件夹设置它,并为每个文件夹设置特定的文件名,但我想要一个可以运行未定义的文件夹和名称变体的函数。

我之前使用的是:

gulp.task('js', function () {
    gulp.src('src/js/app/**/*.js')
        .pipe(plumber(plumberErrorHandler))
        .pipe(jshint())
        .pipe(jshint.reporter('fail'))
        .pipe(concat('app.min.js'))
        .pipe(uglify())
        .pipe(gulp.dest('assets/js'))
});

2 个答案:

答案 0 :(得分:1)

查看this官方食谱。它应该准确显示你想要的东西。

function getFolders(dir) {
    return fs.readdirSync(dir)
      .filter(function(file) {
        return fs.statSync(path.join(dir, file)).isDirectory();
      });
}

var folders = getFolders('src');

folders.map(function(folder) {      
      gulp.src(path.join('src', folder, '/**/*.js'))
        .pipe(concat(folder + '.js'))
        .pipe(gulp.dest('assets'));
   });

答案 1 :(得分:0)

  

但我想要一个可以运行未定义的文件夹和名称变体的函数。

我个人不知道一个简单的方法。我通常会解决我的问题是设置一个路径变量,其中包含这些文件夹的名称并构建我的任务。

var path = [ 'app', 'vendor' ];

gulp.task('js', function () {
  for (var i = 0; i < path.length; i++) {
    var p = path[i];
    gulp.src('src/' + p + '/**/*.js')
        .pipe(plumber(plumberErrorHandler))
        .pipe(jshint())
        .pipe(jshint.reporter('fail'))
        .pipe(concat(p + '.min.js'))
        .pipe(uglify())
        .pipe(gulp.dest('assets/js'))
  }
});

我听说 gulp-path 可能会做你想要的,但我个人还没有调查过。