仅当文件深度超过两个级别时才合并文件

时间:2016-11-24 12:07:33

标签: gulp

我有这个文件结构:

    • Folder1中

      • Subfolder1.1
        • Subfolder1.1.1
          • file_1.1.1.1.js
          • file_1.1.1.2.js
        • file_1.1.1.js
        • file_1.1.2.js
      • Subfolder1.2
    • FOLDER2

    • Folder3

我试图完成以下gulp任务,该任务将采用根目录,在本例中为Root文件夹,并生成以下结构:

    • Folder1中

      • Subfolder1.1
        • Subfolder1.1.1.min.js
        • file_1.1.1.min.js
        • file_1.1.2.min.js
      • Subfolder1.2
    • FOLDER2

    • Folder3

如您所见,直接位于第二级的文件,例如Subfolder1.1只是缩小了。所有超过两个级别的文件将被连接并以包含它们的第二级文件夹命名。

这是否有可能在gulp中实现,如果是的话,有人能给我一个如何做的线索吗?

2 个答案:

答案 0 :(得分:0)

也许这可以帮助你run some tasks by folder。 或许你可以在building such a thing yourself by iterating over directories找到一些帮助。

答案 1 :(得分:0)

好的,我能够做到,这是代码:

gulp.task('task',
function() {
    // The input root dir
    var root = 'root_in';

    // The output root dir
    var rootOut = 'root_out'

    // first get all the folders in the in the root directory
    var folders = fs.readdirSync(root)
        .filter(function(file) {
            return fs.statSync(path.join(root, file)).isDirectory();
        });

    return folders.map(function(folder) {
        // get the files inside each folder
        var files = fs.readdirSync(path.join(root, folder));
        files.map(function(file) {

            // in case it is a directory, concat all the files 
            if (fs.statSync(path.join(root, folder, file)).isDirectory()) {
                return gulp.src(path.join(root, folder, file, '/**/*.js'))
                    .pipe(uglify())
                    .pipe(gulp_concat(file + '.js'))
                    .pipe(gulp.dest(path.join(root, folder)))
            }
            // if it is a regular file, just uglify it and output
            else {
                return gulp.src(path.join(root, folder, file))
                    .pipe(uglify())
                    .pipe(gulp.dest(path.join(rootOut, folder)));
            }
        });
    });
});