web-dev-qa-db-ja.com

複数のファイルを除外するためのnode.js globパターン

Npmモジュール node-glob を使用しています。

このスニペットは、現在の作業ディレクトリ内のすべてのファイルを再帰的に返します。

var glob = require('glob');
glob('**/*', function(err, files) {
    console.log(files);
});

サンプル出力:

[ 'index.html', 'js', 'js/app.js', 'js/lib.js' ]

index.htmljs/lib.jsを除外したいです。これらのファイルを除外パターン '!'で除外しようとしましたが、運はありません。パターンを使用するだけでこれを達成する方法はありますか?

31
ke_wa

私はそれがもう実際ではないと思うが、私は同じ質問にこだわって答えを見つけた。

これは、npm globモジュールのみを使用して実行できます。 glob関数の2番目のパラメーターとして options を使用する必要があります

glob('pattern', {options}, cb)

必要に応じてoptions.ignoreパターンがあります。

var glob = require('glob');

glob("**/*",{"ignore":['index.html', 'js', 'js/app.js', 'js/lib.js']}, function (err, files) {
  console.log(files);
})
49
Sergei Panfilov

globby をチェックしてください。これはほとんど glob です。複数のパターンとPromise APIがサポートされています。

const globby = require('globby');

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

そのために node-globule を使用できます:

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

これが私のプロジェクトのために書いたものです:

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

そして、このように呼び出します(配列を使用):

var paths = globArray(["**/*.css","**/*.js","!**/one.js"], {cwd: srcPath});

またはこれ(単一の文字列を使用):

var paths = globArray("**/*.js", {cwd: srcPath});
2
Intervalia

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