React没有切换到生产模式

时间:2016-05-19 00:09:37

标签: node.js reactjs

浏览器控制台中的警告:

  

bundle.js:1警告:您好像正在使用缩小版的副本   React的开发构建。将React应用程序部署到生产时,   确保使用跳过开发警告的生产构建   并且更快。有关详细信息,请参阅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

如果我在console.log(process.env.NODE_ENV)中使用server.js,我会production

  • 通过 npm
  • 安装
  • 最新版本:15.0.2
  • 我使用Webpack UglifyJs插件

知道可能出现什么问题吗?

从第一个blockquote中的链接:

  

注意:默认情况下,React将处​​于开发模式。使用React   生产模式,将环境变量NODE_ENV设置为生产   (使用envify或webpack的DefinePlugin)。执行的缩小器   完全建议使用UglifyJS等死代码消除功能   删除开发模式中存在的额外代码。

我错过了什么吗?我真的需要某种第三方软件包或插件来设置变量吗?但是它已经在生产环境中控制日志了。对我来说似乎不合逻辑。

更新:当前的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' 
      }
    ]
  }
}

1 个答案:

答案 0 :(得分:10)

我通常如何做到这一点:

new webpack.DefinePlugin({
    'process.env': {
        NODE_ENV: JSON.stringify(process.env.NODE_ENV),
    },
}),

并将其传递给webpack插件的数组。

为什么会出现问题:当wepack进程代码时 - 正在处理的代码实际上并没有运行,只是简单地读取+处理。因此,当您运行它时 - 访问环境变量为时已晚。

您正在检查服务器上运行的进程的环境,而react在浏览器中运行,因此很明显它无法访问服务器进程环境变量。因此,您需要在构建期间明确地将其注入其中。