如何开启/closuresReactJS'开发模式'?

开始使用ReactJS的道具validationfunction ,由于性能方面的原因,该function只能在“开发模式”下使用。

React似乎validation了我注释过的特定组件的属性,但是我不记得明确地打开“开发模式”。

我试图寻找如何触发/切换开发模式,但没有任何运气。

另一个答案假设你正在使用外部预build的文件作为反应,而正确的是,大多数人不是如何或应该消耗React作为一个包。 此外,在这一点上,大多数React库和包都依赖于相同的约定来在生产期间closures开发时间助手。 只要使用缩小的反应,就会在桌面上留下所有潜在的优化。

最终,神奇的是React在整个代码库中embedded了对process.env.NODE_ENV引用。 这些就像一个function切换。

 if (process.env.NODE_ENV !== "production") // do propType checks 

以上是最常见的模式,其他图书馆也是如此。 所以要“禁用”这些检查,我们需要将NODE_ENV切换到"production"

禁用“开发模式”的正确方法是通过您的捆绑软件select。

的WebPack

在您的webpackconfiguration中使用DefinePlugin ,如下所示:

 new webpack.DefinePlugin({ "process.env": { NODE_ENV: JSON.stringify("production") } }) 

Browserify

使用Envify转换并运行您的browserify构build步骤NODE_ENV=production (在Windows上"set NODE_ENV=production"

结果

这将产生输出包,其中所有的process.env.NODE_ENV实例都被string文字取代: "production"

奖金

缩小转换的代码时,您可以利用“无效代码”。 DCE是当minifier足够聪明的时候意识到: "production" !== "production" 总是错误的,所以只要删除if块中的任何代码就可以节省你的字节。

是的,这是不是很好的文件,但在ReactJS 下载页面上谈到开发和生产模式:

我们提供了两个版本的React:用于开发的未压缩版本和用于生产的缩小版本。 开发版本包含关于常见错误的额外警告,而生产版本包括额外的性能优化并去除所有错误消息。

基本上,React的unminified版本是“开发”模式,React的缩小版本是“生产”模式。

要处于“生产”模式,只需包含缩小版本react-0.9.0.min.js

我在其他地方发布了,但坦率地说,这里会更好。

假设你用npm安装了React 15.0.1, import react from 'react'react = require('react')将会运行./mode_modules/react/lib/React.js这是React的原始资源。

React文档build议您使用./mode_modules/react/dist/react.js进行开发,并使用react.min.js进行生产。

如果您将生产中的/lib/React.js/dist/react.js缩小,则React将显示一条警告消息,表示您缩减了非生产代码:

Warning: It looks like you're using a minified copy of the development build of React. When deploying React apps to production, make sure to use the production build which skips development warnings and is faster. See fb.me/react-minification for more details.

react-dom,redux,react-reduxperformance相似。 Redux显示警告消息。 我相信反应也是。

所以你明确的鼓励使用从/dist生产版本。

但是,如果你缩小/dist版本,webpack的UglifyJsPlugin会抱怨。

WARNING in ../~/react/dist/react.js Critical dependencies: 4:478-485 This seems to be a pre-built javascript file. Though this is possible, it's not recommended. Try to require the original source to get better results. @ ../~/react/dist/react.js 4:478-4851

你不能避免这个消息,因为UglifyJsPlugin只能排除webpack块,而不是单个文件。

我自己使用开发和生产/dist版本。

  • Webpack有更less的工作要做,而且要尽快完成。 (YRMV)
  • 反应文档说/dist/react.min.js是生产优化。 我读过没有证据'process.env': { NODE_ENV: JSON.stringify(IS_PRODUCTION ? 'production' : 'development') }加上uglify和'/ dist / react.min.js'一样不错。 我读过没有证据,你得到相同的结果代码。
  • 我从uglify获得1个警告消息,而不是来自react / redux生态系统的3个警告消息。

你可以让webpack使用/dist版本:

 resolve: { alias: { 'react$': path.join(__dirname, 'node_modules', 'react','dist', (IS_PRODUCTION ? 'react.min.js' : 'react.js')), 'react-dom$': path.join(__dirname, 'node_modules', 'react-dom','dist', (IS_PRODUCTION ? 'react-dom.min.js' : 'react-dom.js')), 'redux$': path.join(__dirname, 'node_modules', 'redux','dist', (IS_PRODUCTION ? 'redux.min.js' : 'redux.js')), 'react-redux$': path.join(__dirname, 'node_modules', 'react-redux','dist', (IS_PRODUCTION ? 'react-redux.min.js' : 'react-redux.js')) } } 

对于基于webpack的构build,我曾经为DEV和PROD设置单独的webpack.config.js。 对于Prod,parsing别名如下

  alias: { 'react$': path.join(__dirname, 'node_modules', 'react','dist','react.min.js'), 'react-dom$': path.join(__dirname, 'node_modules', 'react-dom','dist','react-dom.min.js') } 

你可以从这里find工作

如果你正在从这个ReactJS.NET / Webpack教程的工作 ,你不能使用process.env切换React开发模式,据我所知。 此示例直接链接到react.js(请参阅Index.cshtml ),因此您只需通过更改URL来select.min.js或未缩小的变体。

我不确定这是为什么,因为样本的webpack.config.js有一个评论,似乎暗示了externals: { react: 'React' }会做这个工作,但是,然后继续,包括直接反应这一页。