reactjs 源代码中明显的 ifs 有什么意义?
What is the point of obvious ifs in reactjs source?
我发现源码里全是对比if ("production" !== "development")
.
例如(来自https://cdnjs.cloudflare.com/ajax/libs/react/0.12.2/react.js,第6240行):
if ("production" !== "development") {
this._checkPropTypes(
contextTypes,
maskedContext,
ReactPropTypeLocations.context
);
}
但是为什么呢?此类检查的结果始终相同。
他们使用browserify with envify。
envify will replace your environment variable checks with ordinary
strings - only the variables you use will be included, so you don't
have to worry about, say, AWS_SECRET_KEY leaking through either. [...]
By running this through a good minifier (e.g. UglifyJS2), the above
code would be stripped out completely.
这样做是为了启用仅开发检查和日志记录。
如果您查看 React 源代码,您会看到 if (__DEV__)
个检查,这些检查在 React 的构建过程中被替换为 if ("production" !== process.env.NODE_ENV)
。
envify 然后用于在构建过程 运行.
时用其当前值替换源中对 process.env.NODE_ENV
的引用
对于 React 的未压缩开发版本(默认情况下使用 npm 版本时)process.env.NODE_ENV
设置为 "development"
,因此您可以获得这些额外检查的好处,例如验证由于配置错误,针对其 propTypes
, warning if controlled components 传递给组件的道具可能是只读的,关于没有 key
道具的项目列表的警告以及 React 提供的所有其他开发模式日志记录常见问题,例如生命周期拼写错误方法和 HTML 属性道具名称。
对于压缩生产构建,process.env.NODE_ENV
设置为 "production"
,因此当使用 UglifyJS 压缩构建时,Ugilify 的死代码消除过程会检测到这些代码块作为永远不会 运行 并从源代码中完全删除的代码。
这样做的一个很好的副作用是您可以利用 if ("production" !== process.env.NODE_ENV)
检查将仅开发检查和日志记录添加到您自己的 React 组件和库中,因为目前人们从 npm 捆绑 React(使用v0.12.2(撰写本文时的当前版本)必须将其作为构建过程的一部分进行处理。
我发现源码里全是对比if ("production" !== "development")
.
例如(来自https://cdnjs.cloudflare.com/ajax/libs/react/0.12.2/react.js,第6240行):
if ("production" !== "development") {
this._checkPropTypes(
contextTypes,
maskedContext,
ReactPropTypeLocations.context
);
}
但是为什么呢?此类检查的结果始终相同。
他们使用browserify with envify。
envify will replace your environment variable checks with ordinary strings - only the variables you use will be included, so you don't have to worry about, say, AWS_SECRET_KEY leaking through either. [...] By running this through a good minifier (e.g. UglifyJS2), the above code would be stripped out completely.
这样做是为了启用仅开发检查和日志记录。
如果您查看 React 源代码,您会看到 if (__DEV__)
个检查,这些检查在 React 的构建过程中被替换为 if ("production" !== process.env.NODE_ENV)
。
envify 然后用于在构建过程 运行.
时用其当前值替换源中对process.env.NODE_ENV
的引用
对于 React 的未压缩开发版本(默认情况下使用 npm 版本时)process.env.NODE_ENV
设置为 "development"
,因此您可以获得这些额外检查的好处,例如验证由于配置错误,针对其 propTypes
, warning if controlled components 传递给组件的道具可能是只读的,关于没有 key
道具的项目列表的警告以及 React 提供的所有其他开发模式日志记录常见问题,例如生命周期拼写错误方法和 HTML 属性道具名称。
对于压缩生产构建,process.env.NODE_ENV
设置为 "production"
,因此当使用 UglifyJS 压缩构建时,Ugilify 的死代码消除过程会检测到这些代码块作为永远不会 运行 并从源代码中完全删除的代码。
这样做的一个很好的副作用是您可以利用 if ("production" !== process.env.NODE_ENV)
检查将仅开发检查和日志记录添加到您自己的 React 组件和库中,因为目前人们从 npm 捆绑 React(使用v0.12.2(撰写本文时的当前版本)必须将其作为构建过程的一部分进行处理。