web-dev-qa-db-ja.com

grunt(minimatch / glob)フォルダーの除外

私は、特定のフォルダーを除いて、コードベースをリントするために無愛想にしようとしている状況があります。

gruntは、ボンネットの下でミニマッチ(bsdglobに類似)を使用してファイルを照合しますが、フォルダーを除外する.gitignoreスタイルを実行する方法がわからないようです。

これを摂取したい:

ignoreme

そしてこれらを一致させます:

/folder/path/here/to/something/ok.js
/another/folder/path.js
/test.js

しかし、これらに一致しません:

/folder/ignoreme/something.js
/folder/path/here/to/ignoreme/metoo/file.js

これは、ignoremeを含むすべてに一致します。

/**/*.js

だから私は次のようなことができると考えました:

/**/!(ignoreme)/**/*.js

ただし、ignoremeフォルダー内のファイルと一致します。

私は正規表現に慣れていますが、ここでパターンや何かを繰り返す方法を理解できないようです-私は次のようなものも試しました:

/(!(ignoreme)|*)*/*.js

コンテナが繰り返されることを期待していますが、それは機能せず、すべてに一致しません。

正規表現を渡してうなりファイルのパスを渡す方法、またはこれを私のために機能させる方法はありますか?

更新:

現在、この問題をどのように扱っているかを以下に示します。

var pattern = /\/ignoreme\//
var files = grunt.file.expandFiles(arrayOfFilesPassedToMinimatch).filter(function(f){
  return !pattern.test(f)
})

ミニマッチでフォルダの除外が可能かどうかはまだ興味があります。

74
Jesse

現在開発中のバージョン0.4.0aでは、grunt.file.expandメソッドが除外をサポートするようになり、基礎となるミニマッチマッチングライブラリよりもおそらくそれほど複雑ではありません。これは、grunt.file.expandmultipleパターンを受け入れるため(ミニマッチは1つしか受け入れないため)可能です。

grunt.file.expandドキュメント から:

このメソッドは、カンマ区切りのワイルドカードパターンまたはワイルドカードパターンの配列を受け入れます。 !で始まるパターンに一致するパス返される配列から除外されます。パターンは順番に処理されるため、包含と除外の順序は重要です。

つまり、['/**/*.js', '!**/ignoreme/**']を指定でき、最初のパターンはすべての.jsファイルを結果セットに追加し、2番目のパターンはすべての/ignoreme/ファイルを結果セットから削除します。

本当に興味があるなら grunt.file.match unit tests を見てください。

この機能を提供するgruntのバージョンは公式にはリリースされていませんが、プロジェクトで使用することに興味がある場合は、 開発中の機能「X」をいつ使用できますか? FAQエントリ。

149