webentwicklung-frage-antwort-db.com.de

node.js Glob-Muster zum Ausschließen mehrerer Dateien

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?

31
ke_wa

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

Check out globby , das ist ziemlich glob mit Unterstützung für mehrere Muster und eine Promise-API:

const globby = require('globby');

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

Sie können dafür Node-Globule verwenden:

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

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

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

});
1
Ivan Ferrer