5

为了解决来自 Redux 的警告背后的问题,我偶然发现了一个建议,该建议解释了在使用 React 或 Redux 时,为了生成针对生产使用而优化的构建,envifying 是必要的步骤。Envifying被解释为process.env.NODE_ENV用实际值(例如'production'.

接受 envifying 是必要的并且上述解释是正确的,这让我感到困惑,因为它似乎假设 React 和 Redux 等客户端库将包含节点特定的环境变量。是的,我知道这些库特别适用于构建同构/通用 JavaScript 应用程序,但会令人惊讶。我理解正确吗?如果是这样,是否有我需要注意在process.env.NODE_ENV节点之外使用的模式的解释?

如果我正确理解了这些建议,它会建议如果我使用 Webpack,我可能想要使用DefinePlugin类似这样的插件。

  new webpack.DefinePlugin({
    "process.env.NODE_ENV": process.env.NODE_ENV,
  }),

这似乎还需要我将 NODE_ENV 变量设置为我想为我的客户端代码生成的目标环境。这很奇怪,因为我在构建服务器上设置了一个环境变量,以反映实际代码在部署到的服务器上运行的环境应该是什么。

所有这一切让我觉得我在一般模式方面遗漏了一些东西。

相关信息:

4

1 回答 1

4

您也可以拥有 Web 应用程序的生产和开发版本/条件!正如您所提到的,许多同构 JS 框架都使用它。

envify以两种主要方式为使用的代码提供帮助process.env

  1. 不再需要 shims 来支持它——Browserify 有一个自动时钟,大约 2kb,这很重要。
  2. 更好地缩小代码- 当代码变得像if ("development" === "production")一个好的缩小器时,可以将其完全剥离

请记住,Webpack 就是要转换您的(通常是客户端)代码。添加一些东西来查找-替换所有实例process.env完全在其用例中,并且允许您创建基于环境的行为而无需引入新的 API。在你的环境中设置它的值webpack.config实际上与在你的操作系统上设置环境变量没有什么不同。

于 2016-03-01T05:44:41.353 回答