2014-09-18 6 views
5

Ich schreibe eine Mixin für ReactJS. Ich möchte, dass es eine Validierung durchführt, aber nur, wenn ReactJS in development mode verwendet wird.Wie kann ich feststellen, ob ReactJS sich im Entwicklungsmodus von JavaScript befindet?

Wie kann ich anhand von JavaScript feststellen, ob sich ReactJS im Entwicklungs- oder Produktionsmodus befindet?

+0

Sie können '__DEV__ 'Variable mit Webpack setzen .. –

+0

Wenn Sie ein Mixin schreiben, möchten Sie wahrscheinlich Benutzer nicht zwingen, ReactJS selbst wieder aufzubauen. – danvk

Antwort

10

Die ReactJS-Quelle verwendet eine Variable namens __DEV__, um dies zu verfolgen, aber sie wird nicht exportiert, daher ist sie für Ihren Mixin nicht verfügbar.

Seine Folgen sind jedoch. Wenn Sie beispielsweise eine Invariante aufbrechen, gibt Ihnen der Dev-Modus ReactJS eine schöne Beschreibung dessen, was schief gelaufen ist. Im Produktionsmodus wird ein generischer Fehler angezeigt, der Sie auffordert, die dev-Version zu verwenden.

Wir können diese verwenden, um eine Funktion zu bauen, wenn der Modus in dev Reaktion bestimmt:

function isDevReact() { 
    try { 
    React.createClass({}); 
    } catch(e) { 
    if (e.message.indexOf('render') >= 0) { 
     return true; // A nice, specific error message 
    } else { 
     return false; // A generic error message 
    } 
    } 
    return false; // should never happen, but play it safe. 
}; 

Das funktioniert, weil die Ausnahme für nicht render Verfahren implementiert, in den beiden Modi unterschiedlich ist:

Development: "Invariant Violation: createClass(...): Class specification must implement a `render` method. Inline JSX script:16" 
Production: "Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings. Inline JSX script:16" 

Das Wort "render" ist spezifisch für die Invariante, gegen die wir verstoßen haben. Daher wird es nur in der Ausnahme der dev-Version angezeigt.

Verwandte Themen