74

特定のフォルダを除いて、gruntを使用してコードベースをリントしようとしている状況があります。

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

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

4

1 に答える 1

148

現在開発中のバージョン 0.4.0a では、このgrunt.file.expandメソッドは除外をサポートするようになりました。これは、基盤となるミニマッチ マッチング ライブラリよりも間違いなく単純な方法で行われます。これが可能なのは、複数のgrunt.file.expandパターンを受け入れるためです(一方、ミニマッチは 1 つしか受け入れません)。

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

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

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

本当に興味がある場合は、 grunt.file.match 単体テストを見てください。

この機能を提供する grunt のバージョンは正式にリリースされていないことに注意してください。ただし、プロジェクトで使用することに興味がある場合は、いつ開発中の機能 'X' を使用できるようになりますか? を参照してください。よくある質問のエントリ。

于 2012-09-28T03:12:57.953 に答える