1. ホーム
  2. javascript

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

2023-11-16 04:18:18

質問

私は、特定のフォルダを除いて、コードベースをlintするためにgruntを使用しようとしている状況を持っています。

gruntはファイルのマッチングにminimatch(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

は、コンテナが繰り返されることを期待しますが、それはうまくいかず、すべてにマッチしないだけです。

gruntのファイルパスに正規表現を渡すか、これが私のために働くようにする何か方法はありますか?

更新しました。

現在、私がどのようにこの問題に対処しているかを紹介します。

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

やはりminimatchでフォルダ除外が可能かどうかが気になるところです。

どのように解決するのですか?

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

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

このメソッドは、カンマで区切られたワイルドカードパターンか、ワイルドカードパターンの配列のどちらかを受け取ります。で始まるパターンにマッチするパスは、返される配列から除外されます。パターンは順番に処理されるため、インクルージョンと除外の順番は重要です。

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

を見てみましょう。 grunt.file.match ユニットテスト を見てください。

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