2016-06-28 9 views
3

私はイスタンブールのレポーターが扱うべきすべてのファイルをWebpackのrequire.contextと一緒に入れようとしています。Webpackのrequire.contextからファイルを除外する

.test.jsの拡張子を持たないすべてのファイルをappに含める/必要としたいと思います。

// internals/testing/test-bundler.js 
const context = require.context('../../app', true, /^.*(?!(\.test|internals.*))\.js$/); 
context.keys().forEach(context); 

マイファイルの構造は次のとおりです。

app/components/ 
app/containers/ 
app/decorators/ 
app/orm/ 
app/pages/ 
app/store/ 
app/tests/ 
app/utils/ 
app/app.js 
app/reducers.js 
app/routes.js 
internals/testing/test-bundler.js 

カバレッジレポート内で、私はすべての.test.jsファイルとさえinternals/testing/test-bundler.jsファイルを参照してくださいので、明らかに私の正規表現は動作しません。

私は間違っていますか?

答えて

6

否定的な先読みのどの部分が拒否を採用したのかを意識する必要があります。あなたが最初のスラッシュの直後にそれを行うなら、それはうまく動作します。

そして、testの直後ではなく、スラッシュの後に.*testを拒否したいとします。

/^(?!internals).*\/(?!.*test).*\.js$/ 

より具体的には、パス名にinternalsを許可しない。
NOR test.jsで終わる:単にfilterの簡単な使用して、あなたのパスをフィルタリングについて

^(?!.*(?:internals|test.js$)).*\.js$ 
+0

テスト、あなたの答えだけ 'アプリ/ app.js'を返しますか? – Veverke

+0

'internals/*'ではなく、任意のディレクトリのパスを返します。そして、彼らは最初のスラッシュの後に 'テスト'を持っていません。その意味で、 'test/internals.js'は引き続き通過します。正規表現では簡単に変更できます。 – LukStorms

2

何?

フィドル:彼のサンプルからのパスを持つ

var paths = [ 
 
'app/components/', 
 
'app/containers/', 
 
'app/decorators/', 
 
'app/orm/', 
 
'app/pages/', 
 
'app/store/', 
 
'app/tests/', 
 
'app/utils/', 
 
'app/app.js', 
 
'app/reducers.js', 
 
'app/routes.js', 
 
'internals/testing/test-bundler.js', 
 
'app/blablabla.test.js' 
 
]; 
 

 
var result = paths.filter(function(e,i){ 
 
    return (e.startsWith('app/') && !e.endsWith('.test.js')) 
 
}); 
 

 
for(var i = 0; i < result.length; i++) 
 
    console.log(result[i]); 
 

関連する問題