【问题标题】:How can I tell whether ReactJS is in development mode from JavaScript?如何从 JavaScript 判断 ReactJS 是否处于开发模式?
【发布时间】:2014-11-13 09:13:30
【问题描述】:

我正在为 ReactJS 写一个Mixin。我希望它做一些验证,但仅限于在 development mode 中使用 ReactJS 时。

如何通过 JavaScript 判断 ReactJS 是处于开发模式还是生产模式?

【问题讨论】:

  • 你可以用 webpack 设置__DEV__ 变量..
  • 如果你正在编写一个 Mixin,你可能不想强迫用户自己重建 ReactJS。

标签: javascript reactjs


【解决方案1】:

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

然而,它的后果是。例如,当你破坏一个不变量时,开发模式 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”这个词是特定于我们违反的不变量,所以它只出现在开发版本的异常中。

【讨论】:

  • 我可以在控制台中看到“React.createClass is deprecated since React 15.5.0”,但消息是“__WEBPACK_IMPORTED_MODULE_0_react___default.a.createClass is not a function”(我正在使用 start-react -应用程序)。我正在搜索“react___default.a.createClass”,它可以工作,但感觉很脆弱。
猜你喜欢
  • 2010-10-13
  • 1970-01-01
  • 2011-01-22
  • 2010-10-12
  • 1970-01-01
  • 2010-12-20
  • 1970-01-01
  • 2011-03-09
  • 1970-01-01
相关资源
最近更新 更多