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期间明确注入它。