2016-07-14 34 views
4

Ich versuche, meine Tests bedingt zu laden, wenn der SPEC Env deklariert wird:require.context: inline RegExp Werke, var RegExp nicht

var context = null 
if (process.env.SPEC) { 
    context = require.context('./tests', true, /.*?SearchInput.*/); 
} 
context.keys().forEach(context); 

Das perfekt funktioniert. Wenn ich nun tun, um diese

var context = null 
if (process.env.SPEC) { 
    var c = /.*?SearchInput.*/; 
    context = require.context('./tests', true, c); 
} 
context.keys().forEach(context); 

Dies funktioniert nicht und alle Dateien in ./ abgestimmt sind

(der Parameter‘./tests' ignoriert werden) Was bin ich? Ich möchte, dass der dritte Parameter der require.context-Funktion ein RegExp-Objekt ist, damit ich RegExp mithilfe einer Variablen konstruieren kann.

EDIT 1

Dies funktioniert nicht:

var context = null 
if (process.env.SPEC) { 
    var c = new RegExp(/.*?SearchInput.*/); 
    context = require.context('./tests', true, c); 
} 
context.keys().forEach(context); 

Um dies zu testen Sie die tests.webpack.js Datei dieses Projekt bearbeiten können: https://github.com/erikras/react-redux-universal-hot-example

Sie müssen Lassen Sie die SPEC-Variable durch das Webpack

new webpack.DefinePlugin({ 
     'process.env': { 
     NODE_ENV: JSON.stringify('test'), 
     SPEC: JSON.stringify(process.env.SPEC || null) 
     }, 
     __CLIENT__: true, 
     __SERVER__: false, 
     __DEVELOPMENT__: true, 
     __DEVTOOLS__: false // <-------- DISABLE redux-devtools HERE 
    }) 

und laufen: sagen SPEC = t npm Lauftest

+0

Haben Sie versucht, die 'RegExp' Konstruktor? –

+0

@RobbyCornelissen - Warum sollte das einen Unterschied machen? – nnnnnn

+0

@nnnnnn Keine Ahnung. Es sollte mit dem Literal funktionieren, das der Variablen zugewiesen wurde, aber laut OP nicht. Der Versuch, mit dem Konstruktor zu arbeiten, würde einen zusätzlichen Datenpunkt bereitstellen und bei der Identifizierung der Ursache helfen. –

Antwort

1

Sokra beantwortet dies auf der webpack Github, dass die regexp statisch analysierbar sein require.context geben müssen: NPM Test

oder ausführen. Deshalb /thing/ Arbeiten vorbei, aber nicht new RegExp(thing)

https://github.com/webpack/webpack/issues/4772