Ich benutze das Npm-Modul Node-Glob .
Dieses Snippet gibt rekursiv alle Dateien im aktuellen Arbeitsverzeichnis zurück.
var glob = require('glob');
glob('**/*', function(err, files) {
console.log(files);
});
beispielausgabe:
[ 'index.html', 'js', 'js/app.js', 'js/lib.js' ]
Ich möchte index.html und js/lib.js ausschließen. Ich habe versucht, diese Dateien mit negativem Muster '!' auszuschließen, aber ohne Glück. Gibt es eine Möglichkeit, dies nur mithilfe eines Musters zu erreichen?
Ich nehme an, es ist nicht mehr aktuell, aber ich bin mit der gleichen Frage festgefahren und habe eine Antwort gefunden.
Dies kann nur mit npm glob
Modul. Wir müssen options als zweiten Parameter für die Funktion glob
verwenden
glob('pattern', {options}, cb)
Da ist ein options.ignore
Muster für Ihre Bedürfnisse.
var glob = require('glob');
glob("**/*",{"ignore":['index.html', 'js', 'js/app.js', 'js/lib.js']}, function (err, files) {
console.log(files);
})
Sie können dafür Node-Globule verwenden:
var globule = require('globule');
var result = globule.find(['**/*', '!index.html', '!js/lib.js']);
console.log(result);
Folgendes habe ich für mein Projekt geschrieben:
var glob = require('glob');
var minimatch = require("minimatch");
function globArray(patterns, options) {
var i, list = [];
if (!Array.isArray(patterns)) {
patterns = [patterns];
}
patterns.forEach(function (pattern) {
if (pattern[0] === "!") {
i = list.length-1;
while( i > -1) {
if (!minimatch(list[i], pattern)) {
list.splice(i,1);
}
i--;
}
}
else {
var newList = glob.sync(pattern, options);
newList.forEach(function(item){
if (list.indexOf(item)===-1) {
list.Push(item);
}
});
}
});
return list;
}
Und nennen Sie es so (mit einem Array):
var paths = globArray(["**/*.css","**/*.js","!**/one.js"], {cwd: srcPath});
oder dies (mit einer einzigen Zeichenfolge):
var paths = globArray("**/*.js", {cwd: srcPath});
Ein Beispielbeispiel mit gulp:
gulp.task('task_scripts', function(done){
glob("./assets/**/*.js", function (er, files) {
gulp.src(files)
.pipe(gulp.dest('./public/js/'))
.on('end', done);
});
});