什么是客户端库的环境?

时间:2016-03-01 05:28:40

标签: javascript node.js webpack redux envify

为了解决来自Redux的警告背后的问题,我偶然发现了the advice,这解释了在使用React或Redux生成为生产使用而优化的构建时,环境是必要的步骤。 Envifying被解释为使用process.env.NODE_ENV等实际值替换节点特定环境变量(例如'production')的过程。

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

如果我理解正确的建议,那么如果我使用Webpack,我可能会想要使用像DefinePlugin这样的插件。

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

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

这一切让我觉得我在一般模式方面缺少某些东西。

相关信息:

1 个答案:

答案 0 :(得分:4)

您也可以拥有网络应用的制作和开发版本/条件!正如您所提到的,许多同构JS框架都在使用它。

envify用于帮助使用process.env

的代码的两种主要方式
  1. 不再需要垫片来支持它 - Browserify有一个大约2kb的自动化时钟,这很重要。
  2. 更好地缩小代码 - 当代码变为类似if ("development" === "production")时,一个好的缩小器可以完全剥离它
  3. 请记住,Webpack就是要改变你的(通常是客户端)代码。添加一些基本上可以找到 - 替换process.env的所有实例的内容完全在其用例中,并允许您创建基于环境的行为而无需引入新的API。在webpack.config中设置其值与在操作系统上设置环境变量没有什么不同。