【问题标题】:React doesn't switch to production modeReact 不会切换到生产模式
【发布时间】:2016-09-15 16:04:25
【问题描述】:

浏览器控制台警告:

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

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

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

知道有什么问题吗?


来自第一个引用中的链接:

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

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


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

【问题讨论】:

  • 检查 webpack.DefinePlugin 并在 webpack 配置中手动传递 process.env。
  • 我用我当前的 webpack 配置文件更新了我的问题。 @zerkms
  • "环境检查工作正常"---你检查服务器进程的环境,而反应在浏览器中工作。

标签: node.js reactjs


【解决方案1】:

这就是我通常的做法:

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

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

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

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

【讨论】:

猜你喜欢
  • 2021-09-03
  • 2022-09-22
  • 1970-01-01
  • 2018-01-04
  • 2020-01-29
  • 2015-04-27
  • 2018-05-14
  • 2021-09-05
  • 1970-01-01
相关资源
最近更新 更多