2016-07-08 110 views
1

我正在尋找能夠幫助我找到文件路徑有效的解決方案。如果文件路徑無效,則顯示一些錯誤。文件路徑在gulp src中有效

gulp.task("scripts-libraries", ["googlecharts"], function() { 
    var scrlibpaths = [ 
      "./node_modules/jquery/dist/jquery.min.js", 
      "./node_modules/bootstrap/dist/js/bootstrap.min.js", 
      "./libs/AdminLTE-2.3.0/plugins/slimScroll/jquery.slimscroll.min.js", 
      "./libs/AdminLTE-2.3.0/plugins/fastclick/fastclick.min.js", 
      "./libs/adminLTE-app.js", 
      "./node_modules/moment/min/moment.min.js", 
      "./node_modules/jquery.inputmask/dist/jquery.inputmask.bundle.js", 
      "./node_modules/bootstrap-timepicker/js/bootstrap-timepicker.min.js", 
      "./node_modules/bootstrap-checkbox/dist/js/bootstrap-checkbox.min.js", 
      "./node_modules/bootstrap-daterangepicker/daterangepicker.js", 
      "./node_modules/select2/dist/js/select2.full.min.js", 
      "./node_modules/toastr/build/toastr.min.js", 
      "./node_modules/knockout/build/output/knockout-latest.js", 
      "./node_modules/selectize/dist/js/standalone/selectize.min.js", 
      //"./src/jquery.multiselect.js" 
    ]; 

    for (var i = 0; i < scrlibpaths.length; i++) { 
     if (scrlibpaths[i].pipe(size()) === 0) { 
      console.log("There is no" + scrlibpaths[i] + " file on your machine"); 
      return; 
     } 
    } 

    return gulp.src(scrlibpaths) 
     .pipe(plumber()) 
     .pipe(concat("bundle.libraries.js")) 
     .pipe(gulp.dest(config.path.dist + "/js")); 
}); 

那麼我該如何讓這個工作?

回答

2

您可以使用glob module來檢查您傳遞給gulp.src()的路徑/球體是否引用現有文件。 Gulp本身通過glob-stream內部使用glob,所以這應該是最可靠的選擇。

這是一個使用glob一個功能,您可以爲更多的或簡易替換較少的常規gulp.src()使用:

var glob = require('glob'); 

function gulpSrc(paths) { 
    paths = (paths instanceof Array) ? paths : [paths]; 
    var existingPaths = paths.filter(function(path) { 
    if (glob.sync(path).length === 0) { 
     console.log(path + ' doesnt exist'); 
     return false; 
    } 
    return true; 
    }); 
    return gulp.src((paths.length === existingPaths.length) ? paths : []); 
} 

然後,您可以使用它像這樣:

return gulpSrc(scrlibpaths) 
    .pipe(plumber()) 
    .pipe(concat("bundle.libraries.js")) 
    .pipe(gulp.dest(config.path.dist + "/js")); 

如果srclibpaths中的任何路徑/球體不存在,則會記錄警告,並且該流將爲空(意味着根本不會處理任何文件)。

+0

這就是我需要的。這是我的問題的正確解決方案。 – hongchen

0

由於gulp就像其他任何node腳本一樣,您可以使用accessSync來檢查文件是否存在(我假設您可能想同步)。

var fs = require('fs'); 
scrlibpaths.map(function(path) { 
    try { 
     fs.accessSync(path); 
    } catch (e) { 
     console.log("There is no " + path + " file on your machine"); 
    } 
});