Gulp 为每个文件夹生成一个文件

eri*_*yen 3 javascript node.js gulp

我正在尝试编写一个 gulp 任务来构建 javascript 文件并为每个文件夹(包括根文件夹)连接一个文件。

我找到了这个解决方案:https://github.com/gulpjs/gulp/blob/master/docs/recipes/running-task-steps-per-folder.md

例如,如果您有一组文件夹,并希望对每个文件夹执行一组任务...

/scripts
/scripts/jquery/*.js
/scripts/angularjs/*.js
Run Code Online (Sandbox Code Playgroud)

...并希望最终...

/scripts
/scripts/jquery.min.js
/scripts/angularjs.min.js
Run Code Online (Sandbox Code Playgroud)

*.js但是,这只会为文件夹内的所有子文件夹构建文件scripts。我正在尝试*.js在根文件夹脚本中构建文件,即我的预期输出将是:

/scripts.min.js
/scripts/jquery.min.js
/scripts/angularjs.min.js
Run Code Online (Sandbox Code Playgroud)

我是节点新手,所以我现在很困惑如何实现这一目标。非常感谢您对此的帮助。多谢。

Phi*_*ick 5

您可以创建一个单独的任务 (baseScripts) 来为基本目录创建缩小的脚本。然后创建另一个运行 baseScripts 和 subScripts 任务的任务 (allScripts)。

var scriptsPath = 'src/scripts';

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

gulp.task('allScripts', ['baseScripts', 'subScripts']);

gulp.task('subScripts', function() {
   var folders = getFolders(scriptsPath);

   var tasks = folders.map(function(folder) {
      return gulp.src(path.join(scriptsPath, folder, '/*.js'))
        .pipe(uglify())
        .pipe(rename(folder + '.min.js'))
        .pipe(gulp.dest(scriptsPath));
   });

   return merge(tasks);
});

gulp.task('baseScripts', function(){
  return gulp.src(scriptsPath + '/*.js')
    .pipe(uglify())
    .pipe(concat('scripts.min.js'))
    .pipe(gulp.dest('src'));
});
Run Code Online (Sandbox Code Playgroud)