您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

您当前正在使用NODE_ENV ==='production'之外的缩小代码。这意味着您正在运行较慢的Redux开发版本

您当前正在使用NODE_ENV ==='production'之外的缩小代码。这意味着您正在运行较慢的Redux开发版本

如果您使用的webpack> = 4,则可以设置modeproduction。这将自动定义NODE_ENV为,production而无需使用define插件https://webpack.js.org/concepts/mode/#mode- production。

似乎webpack已将-p标记更新为自动定义process.env.NODE_ENVproduction捆绑代码中的标记(感谢@ x-yuri指出这一点)。因此,尽管现在不再需要下面的答案,但我将其保留在那里以供参考,并作为webpack定义插件如何工作的解释。

:使用webpack define插件设置process.env.NODE_ENV为正式版。

长版:

React,Redux和许多其他JS库包括额外的验证和错误日志记录,使开发变得更加容易。但是,您显然不希望在生产环境中使用此功能,因为它们会使您的代码库更大,更慢。这些检查通常包裹在如下语句中:

if (process.env.NODE_ENV !== 'production') {
  // do development checks
}

您收到的错误是Redux告诉您,尽管您已缩小代码process.env.NODE_ENV但未设置为production,因此开发检查仍在进行中。要解决此问题,您将需要使用webpack define插件设置process.env.NODE_ENV为正式版。

var webpack = require('webpack');

module.exports = {
  entry: [
    './src/index.js'
  ],
  output: {
    path: __dirname,
    publicPath: '/',
    filename: 'bundle.js'
  },
  module: {
    loaders: [{
      exclude: /node_modules/,
      loader: 'babel',
      query: {
        presets: ['react', 'es2015', 'stage-1']
      }
    }]
  },
  resolve: {
    extensions: ['', '.js', '.jsx']
  },
  devServer: {
    historyApiFallback: true,
    contentBase: './'
  },
  plugins: [
    new webpack.DefinePlugin({
      'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV)
    }),
  ]
};

请注意,我在process.env.NODE_ENV运行webpack时将为您定义的值定义为。因此,要生成生产包,您将需要运行NODE_ENV=production webpack -p,而不仅仅是运行webpack -p。这将替换的任何实例process.env.NODE_ENVproduction你的包。因此,我上面显示的支票现在看起来像这样:

if ('production' !== 'production') {
  // do development checks
}

缩小器足够聪明,可以检测到if语句中的代码永远不会发生,并将其从生产包中删除。因此,您将两全其美:更好的开发体验,并且生产包中没有多余的代码:)

Node 2022/1/1 18:13:55 有624人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶