如何开启/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' }
会做这个工作,但是,然后继续,包括直接反应这一页。