React不会切换到生产模式
浏览器控制台警告:
bundle.js:1警告:看起来您正在使用React的开发版本的缩小副本。 将React应用程序部署到生产环境时,请确保使用跳过开发警告的生产构build,并且速度更快。 有关更多详细信息,请参阅http://facebook.github.io/react/downloads.html 。
来自package.json的脚本:
"scripts": { "start": "if-env NODE_ENV=production && npm run start:prod || npm run start:dev", "start:dev": "webpack-dev-server --inline --content-base public/ --history-api-fallback", "start:prod": "webpack && node server.js" },
在Git Bash中的命令:
NODE_ENV=production npm start
如果我在server.js
使用console.log(process.env.NODE_ENV)
,那么我得到了production
。
- React 通过 npm安装
- 最新版本:15.0.2
- 我使用Webpack的
UglifyJs
插件
任何想法可能是错的?
从第一个引号的链接:
注意:默认情况下,React将处于开发模式。 要在生产模式下使用React,请将环境variablesNODE_ENV设置为生产(使用envify或webpack的DefinePlugin)。 build议使用UglifyJS等执行死代码清除的清除器来完全删除开发模式中存在的额外代码。
我错过了什么吗? 我真的需要某种第三方包或插件来设置variables吗? 但它已经控制日志,它是在生产环境..对我来说似乎不符合逻辑。
更新:当前的webpack.config.js
var webpack = require('webpack') module.exports = { entry: './index.js', output: { path: 'public', filename: 'bundle.js', publicPath: '/' }, plugins: process.env.NODE_ENV === 'production' ? [ new webpack.optimize.DedupePlugin(), new webpack.optimize.OccurrenceOrderPlugin(), new webpack.optimize.UglifyJsPlugin() ] : [], module: { loaders: [ { test: /\.js$/, exclude: /node_modules/, loader: 'babel-loader?presets[]=es2015&presets[]=react' } ] } }
这就是我通常这样做的:
new webpack.DefinePlugin({ 'process.env': { NODE_ENV: JSON.stringify(process.env.NODE_ENV), }, }),
并将其传递给webpack插件的数组。
为什么会发生问题:当处理代码时 – 正在处理的代码实际上并不运行,只是简单的读取和处理。 所以当你运行它时,访问环境variables已经太迟了。
你正在检查在服务器上运行的进程的环境,而在浏览器中运行的反应显然不能访问服务器进程环境variables。 因此,您需要在构build期间明确注入它。