J'utilise le module npm node-glob .
Cet extrait renvoie de manière récursive tous les fichiers du répertoire de travail actuel.
var glob = require('glob');
glob('**/*', function(err, files) {
console.log(files);
});
exemple de sortie:
[ 'index.html', 'js', 'js/app.js', 'js/lib.js' ]
Je veux exclure index.html et js/lib.js . J'ai essayé d'exclure ces fichiers avec un motif négatif '!' mais sans chance. Existe-t-il un moyen d'y parvenir uniquement en utilisant un modèle?
Je suppose que ce n'est plus réel mais je suis resté coincé avec la même question et j'ai trouvé une réponse.
Cela peut être fait en utilisant uniquement npm glob
module. Nous devons utiliser options comme deuxième paramètre de la fonction glob
glob('pattern', {options}, cb)
Il y a un options.ignore
modèle pour vos besoins.
var glob = require('glob');
glob("**/*",{"ignore":['index.html', 'js', 'js/app.js', 'js/lib.js']}, function (err, files) {
console.log(files);
})
Vous pouvez utiliser node-globule pour cela:
var globule = require('globule');
var result = globule.find(['**/*', '!index.html', '!js/lib.js']);
console.log(result);
Voici ce que j'ai écrit pour mon projet:
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;
}
Et appelez-le comme ceci (en utilisant un tableau):
var paths = globArray(["**/*.css","**/*.js","!**/one.js"], {cwd: srcPath});
ou ceci (en utilisant une seule chaîne):
var paths = globArray("**/*.js", {cwd: srcPath});
Un exemple d'échantillons avec gulp:
gulp.task('task_scripts', function(done){
glob("./assets/**/*.js", function (er, files) {
gulp.src(files)
.pipe(gulp.dest('./public/js/'))
.on('end', done);
});
});