5

我正在我的项目中设置 Redux DevTools ( https://www.npmjs.com/package/redux-devtools ),并希望在构建我的生产项目时排除 DevTools。文档说这可以通过使用以下代码来完成:

if (process.env.NODE_ENV === 'production') {
  module.exports = require('./configureStore.prod');
} else {
  module.exports = require('./configureStore.dev');
}

我已经有一个带有常量的模块,所以我把对 NODE_ENV 的检查放在那里。

Constants.PRODUCTION = process.env.NODE_ENV === 'production'

在我的 Webpack 配置文件中,我有以下代码可以正常工作:

const production = process.env.NODE_ENV === 'production'

var config = {
  // configuration goes here
}

if (production) {
  config.plugins = [
    new webpack.optimize.UglifyJsPlugin({
      compress: {
        warnings: false,
      },
    }),
  ].concat(config.plugins)
}

运行set NODE_ENV=production&&webpack构建时会缩小并使用只是webpack不缩小构建。但是,在源代码本身中 NODE_ENV 是未定义的:

console.log(process.env.NODE_ENV) // Output: Undefined

如果我将我设置Constants.PRODUCTION为,true则构建中不包含 DevTools。不知何故,我应该使用 DefinePlugin 或 ProvidePlugin(Redux DevTools 文档都提到了它们,但在不同的地方),但我不知道怎么做。我正在使用 Windows 10、DevTools 3.0.0 和 npm 脚本来运行构建过程。谁能帮助我如何在我的 webpack 配置文件中设置 DefinePlugin 或 ProvidePlugin?

4

2 回答 2

3

我自己解决了;在 webpack 配置文件中我添加了这个:

plugins: [
  // Some other plugins
  new webpack.DefinePlugin({
      PRODUCTION: production,
  })
]

我将常量模块中的代码更改为

Constants.PRODUCTION = PRODUCTION

那行得通。现在,当运行我的 npm 脚本时,我得到了一个没有模块的构建,因为它在 uglifying 过程中被完全删除,我可以像以前一样启动 webpack 开发服务器,然后我加载了 Redux DevTools:

"scripts": {
  "start": "set NODE_ENV=development&&webpack-dev-server",
  "build": "set NODE_ENV=production&&webpack --progress --colors"
}

问题中的第一个代码片段现在如下所示:

if (Constants.PRODUCTION) {
  module.exports = require('./configureStore.prod');
} else {
  module.exports = require('./configureStore.dev');
}
于 2015-12-27T11:42:23.923 回答
0

基于webpack 文档。设置webpack -p将执行以下操作

  • 使用 UglifyJSPlugin 缩小
  • 运行 LoaderOptionsPlugin
  • 设置节点环境变量

因此,您需要做的就是设置 -p 标志,而不是手动设置 NODE_ENV。像这样的东西

"scripts": {
  "start": "webpack-dev-server",
  "build": "webpack -p --progress --colors"
}
于 2017-04-09T07:01:59.947 回答