2015-06-17 85 views
3

我正在嘗試編寫一個gulp任務來構建javascript文件併爲每個文件夾(包括根文件夾)連接一個文件。爲每個文件夾生成一個文件gulp

我發現這個解決方案:https://github.com/gulpjs/gulp/blob/master/docs/recipes/running-task-steps-per-folder.md

如果你有一組文件夾,並希望每個 執行一系列任務,例如...

/scripts 
/scripts/jquery/*.js 
/scripts/angularjs/*.js 

。 ..和要結束了......

/scripts 
/scripts/jquery.min.js 
/scripts/angularjs.min.js 

然而,THI s只爲scripts文件夾內的所有子文件夾生成*.js文件。我試圖建立*.js文件的根文件夾裏面的腳本,即我的預期產出將是:

/scripts.min.js 
/scripts/jquery.min.js 
/scripts/angularjs.min.js 

我新的節點,所以我很困惑,現在怎麼做到這一點。非常感謝你對此的幫助。非常感謝。

回答

4

您可以創建一個單獨的任務(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')); 
}); 
+0

感謝您的回答。其實我已經考慮過這個問題,但我正在嘗試爲所有腳本使用單個任務。你可以看看我的方法,並給我反饋。謝謝 :) – erikng

1

經過一天,我想出了一些修改如下。

var paths = { 
    js: { 
     folder: 'dev/assets/js' 
    } 
}; 

gulp.task('js', function() { 
    var folders = getFolders(paths.js.folder); 
    var tasks = folders.map(function(folder) { 
     return gulp.src(path.join(paths.js.folder, folder.path, '/*.js')) 
      .pipe(uglify()) 
      .pipe(concat(folder.name + '.min.js')) 
      .pipe(gulp.dest(paths.js.dest)); 
    }); 
    merge(tasks); 
    browserSync.reload(); 
}); 

var getFolders = function(dir) { 
    var folders = [{path:'',name:'app'}]; 
    var folder = fs.readdirSync(dir) 
     .filter(function(file) { 
      return fs.statSync(path.join(dir, file)).isDirectory(); 
     }); 
    for (var i=0; i<folder.length;i++) { 
     folders.push({path: folder[i], name: folder[i]}); 
    } 
    return folders; 
}; 

我已經將組合腳本的目錄和名稱分成了2個屬性。所以我不需要爲根文件夾和子文件夾執行不同的任務。

請隨時對我的方法發表您的意見:)

相關問題