web-dev-qa-db-fra.com

Modèle glob node.js pour exclure plusieurs fichiers

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?

31
ke_wa

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);
})
49
Sergei Panfilov

Découvrez globby , ce qui est à peu près glob avec la prise en charge de plusieurs modèles et une API Promise:

const globby = require('globby');

globby(['**/*', '!index.html', '!js/lib.js']).then(paths => {
    console.log(paths);
});
42
Sindre Sorhus

Vous pouvez utiliser node-globule pour cela:

var globule = require('globule');
var result = globule.find(['**/*', '!index.html', '!js/lib.js']);
console.log(result);
17
stefanbuck

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});
2
Intervalia

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);
    });

});
1
Ivan Ferrer