如何打开/关闭ReactJS';开发模式';?
开始使用ReactJS,正如文档所说,出于性能原因,ReactJS只能在“开发模式”下工作 React似乎在验证我注释过的特定组件的属性,但我不记得显式地打开了“开发模式”如何打开/关闭ReactJS';开发模式';?,reactjs,Reactjs,开始使用ReactJS,正如文档所说,出于性能原因,ReactJS只能在“开发模式”下工作 React似乎在验证我注释过的特定组件的属性,但我不记得显式地打开了“开发模式” 我试图搜索如何触发/切换开发模式,但没有任何运气。是的,它没有很好的文档记录,但在ReactJS上它谈到了开发和生产模式: 我们提供了React的两个版本:用于开发的未压缩版本和用于生产的缩小版本。开发版本包括关于常见错误的额外警告,而生产版本包括额外的性能优化并去除所有错误消息 基本上,React的未统一版本是“开发”模式
我试图搜索如何触发/切换开发模式,但没有任何运气。是的,它没有很好的文档记录,但在ReactJS上它谈到了开发和生产模式: 我们提供了React的两个版本:用于开发的未压缩版本和用于生产的缩小版本。开发版本包括关于常见错误的额外警告,而生产版本包括额外的性能优化并去除所有错误消息 基本上,React的未统一版本是“开发”模式,而React的精简版本是“生产”模式
要处于“生产”模式,只需包含缩小版
react-0.9.0.min.js
另一个答案假设您使用的是react的外部预构建文件,虽然正确,但大多数人不会或不应该将react作为一个包来使用。此外,在这一点上,大多数React库和包也依赖于相同的约定在生产过程中关闭开发时间助手。只需使用缩小的react,就可以将所有潜在的优化都留在桌面上
最终,魔力在于在整个代码库中嵌入对process.env.NODE\u env
的引用;这些功能类似于功能切换
if (process.env.NODE_ENV !== "production")
// do propType checks
以上是最常见的模式,其他库也遵循这种模式。因此,要“禁用”这些检查,我们需要将NODE\u ENV
切换到“生产”
禁用“开发模式”的正确方法是通过您选择的绑定器
网页包
在您的网页配置中使用以下选项:
new webpack.DefinePlugin({
"process.env.NODE_ENV": JSON.stringify("production")
})
粗制滥造
使用转换并使用NODE\u ENV=production
(“在Windows上设置NODE\u ENV=production”
)运行browserify生成步骤
结果
这将生成输出捆绑包,其中所有process.env.NODE\u env
实例都替换为字符串文字:“production”
奖金
缩小转换后的代码时,可以利用“死代码消除”。DCE是指迷你们足够聪明,能够意识到:
“生产”!==“production”
始终为false,因此只需删除if块中的任何代码即可节省字节。如果您是从这样的方式工作的,就我所知,您不能使用process.env打开/关闭React开发模式。此示例直接链接到react.js(请参阅),因此您只需通过更改URL来选择.min.js或非精简的变体
我不确定为什么会这样,因为示例的webpack.config.js有一条注释似乎暗示了
外部:{react:'react'}
可以完成这项工作,但随后继续,并将react直接包含到页面中。我在其他地方发布了此注释,但坦率地说,这里会是一个更好的地方
假设您使用npm安装React 15.0.1,从“React”导入React
或React=require('React')
将运行作为React原始源的/mode\u modules/React/lib/React.js
React文档建议您使用/mode\u modules/React/dist/React.js
进行开发,使用React.min.js
进行生产
如果您缩小生产的/lib/React.js
或/dist/React.js
,React将显示一条警告消息,表明您已缩小非生产代码:
警告:看起来您使用的是React开发版本的缩小副本。将React应用程序部署到生产环境时,请确保使用跳过开发警告且速度更快的生产环境。有关更多详细信息,请参见fb.me/react-minification。
react-dom、redux、react-redux的行为类似。Redux显示一条警告消息。我相信多姆也是
因此,我们明确鼓励您使用/dist
的生产版本
然而,如果你缩小/dist
版本,webpack的UglifyJsPlugin就会抱怨
../~/react/dist/react.js中的警告
关键依赖项:
4:478-485这似乎是一个预构建的javascript文件。虽然这是可能的,但不建议这样做。尝试要求原始源获得更好的结果。
@../~/react/dist/react.js 4:478-4851
您无法避免此消息,因为UglifyJsPlugin只能排除网页块,而不能排除单个文件
我自己使用开发和生产的/dist
版本
- Webpack需要做的工作更少,完成得更快。(YRMV)
- React文档表示,
针对生产进行了优化。我没有读到任何证据证明,/dist/React.min.js
plus-uglify的工作与“/dist/react.min.js”一样好。我没有读到任何证据表明你得到了相同的结果代码'process.env':{NODE\u env:JSON.stringify(IS_PRODUCTION?'PRODUCTION':'development')}
- 我从uglify收到1条警告信息,而不是从react/redux生态系统收到3条
/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的构建,我曾经为DEV和PROD分别设置webpack.config.js。对于PROD,解析别名如下
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')
}
您可以从中找到仅适用于Webpack v4用户的工作版本:
默认情况下,在网页配置中指定mode:production
和mode:development
将使用DefinePlugin定义process.env.NODE\u env
。不需要额外的代码
webpack.prod.js(取自文档)
在我们的JS中:
console.log(process.env.NODE_ENV) // --> 'development' or 'production'
Webpack文档:我使用一个贯穿Webpack的手动构建过程,因此这对我来说是一个两步过程:
console.log(process.env.NODE_ENV) // --> 'development' or 'production'