如何判断ReactJS是否处于JavaScript开发模式?

时间:2014-09-18 21:27:23

标签: javascript reactjs

我为ReactJS写了Mixin。我希望它能够进行一些验证,但只有在development mode中使用ReactJS时才会这样做。

如何从JavaScript确定ReactJS是处于开发模式还是生产模式?

1 个答案:

答案 0 :(得分:11)

ReactJS源使用一个名为__DEV__的变量来跟踪它,但它没有被导出,所以它对你的Mixin不可用。

然而,它的后果是。当你打破一个不变量时,例如,dev模式ReactJS会给你一个很好的错误描述。在生产模式下,它会给出一个通用错误,告诉您使用开发版本。

我们可以使用它来构建一个确定React是否处于开发模式的函数:

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.
};

这是有效的,因为在两种模式下,不实现render方法的例外是不同的:

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"

单词“render”特定于我们违反的不变量,因此它只显示在dev版本的异常中。