2015-10-19 4 views
7

Unser Schluckaufbau nimmt eine Reihe von Bibliotheken, die mit bower installiert werden, dann verkettet sie mit dem ganzen Code, den wir über mehrere Verzeichnisse verteilt haben. Hier ist, wie es aussieht:Wie kann Gulp.src fehlschlagen, wenn eine Datei fehlt?

var jsFiles = [ 
    sourcePath + '/config/config.js', 
    sourcePath + '/vendor/jquery/dist/jquery.js', 
    sourcePath + '/vendor/js-cookie/src/js.cookie.js', 
    sourcePath + '/vendor/modernizr/modernizr.js', 
    sourcePath + '/vendor/lodash/lodash.js', 
    sourcePath + '/vendor/picturefill/dist/picturefill.min.js', 
    sourcePath + '/templates/**/*.js', 
    sourcePath + '/pages/**/*.js' 
    ], 

gulp.task('build:js', ['jscs'], function() { 
    return gulp.src(jsFiles) 
    .pipe(concat('scripts.js')) 
    .pipe(gulpif(isProd, uglify())) 
    .pipe(gulp.dest(outputPath + '/webresources/js')); 
}); 

Unser Problem ist, dass, wenn jemand neue Bibliotheken hinzufügt, andere Entwickler werden auf Probleme stoßen, wenn sie nicht bower install laufen die neuen Komponenten zu erhalten. Die scripts.js wird ohne sie erstellt, da es nichts dagegen hat, dass eine der Globs leer zurückkehrt, auch wenn es sich um eine benannte Datei handelt.

Wie soll das gelöst werden? Gibt es eine Möglichkeit, einen Fehler zu werfen, wenn ein Glob Null Ergebnisse liefert?

Antwort

7

Da es keine fertige Lösung dafür zu geben schien, schrieb ich ein Modul für unsere Bedürfnisse.

Mit dem Modul files-exist können Sie überprüfen, ob alle Dateien in einem Array vorhanden sind, und es wird ein Fehler ausgegeben, falls einer fehlt. Es gibt ein identisches Array bei Erfolg zurück, so dass es einfach ist, es an Ort und Stelle zu setzen.

var jsFiles = [ 
    sourcePath + '/config/config.js', 
    sourcePath + '/vendor/jquery/dist/jquery.js', 
    sourcePath + '/vendor/js-cookie/src/js.cookie.js', 
    sourcePath + '/vendor/modernizr/modernizr.js', 
    sourcePath + '/vendor/lodash/lodash.js', 
    sourcePath + '/vendor/picturefill/dist/picturefill.min.js', 
    sourcePath + '/templates/**/*.js', 
    sourcePath + '/pages/**/*.js' 
    ], 

filesExist = require('files-exist'), 

gulp.task('build:js', ['jscs'], function() { 
    return gulp.src(filesExist(jsFiles)) // Throws error if a file is missing 
    .pipe(concat('scripts.js')) 
    .pipe(gulpif(isProd, uglify())) 
    .pipe(gulp.dest(outputPath + '/webresources/js')); 
}); 
+1

Hallo, mir fehlten einige Features, wie einzelne String-Parameter und die Möglichkeit, die Ausrufezeichen-Syntax zu verwenden, um Dateien zu ignorieren. Ich habe dir eine Pull-Anfrage gesendet. – schlingel

0

Ich habe dieses Paket verwendet IsThere

https://www.npmjs.com/package/is-there

ab.

PATHS: 
    javascriptCopyNodeModules: 
    # - "node_modules/name.min.js" 

import IsThere from 'is-there'; 

function javascriptCopyNodeModules() { 
    if(IsThere(PATHS.javascriptCopyNodeModules)){ 
     return gulp.src(PATHS.javascriptCopyNodeModules) 
     .pipe(gulp.dest(PATHS.dist + '/assets/js/node_modules')); 
    }else{  
     return gulp.src('.'); 
    } 
} 

seit PATHS.javascriptCopyNodeModules ist leer (#) zurück nichts.

Verwandte Themen