【问题标题】:Confused by how many ways there are to set NODE_ENV对设置 NODE_ENV 有多少种方法感到困惑
【发布时间】:2016-10-14 08:16:19
【问题描述】:

我正在尝试设置一个标志来通知我的代码是处于生产还是开发阶段。到目前为止,我已经看到:

在 VS Code 的launch.json

{ "configurations": { "env": "NODE_ENV": "development" } }

在 Node 的package.json:

{ "scripts": { "start": "NODE_ENV=production" } }

在 Webpack 的 webpack.config.js:

module.exports = { "plugins": new webpack.DefinePlugin({ 'process.env.NODE_ENV': '"production"' }) }

运行代码时:

set NODE_ENV=production && node app

NPM 包:

https://www.npmjs.com/package/envify

Powershell:

$env:NODE_ENV="production"

我想我只是感到困惑,因为默认情况下我目前有大约 4 个这样的设置。这些究竟是如何相互作用的?他们都指的是同一个变量吗?我应该只有其中之一吗?哪些会覆盖其他?

如果只有一个点来设置它,我真的更喜欢,因为似乎每个模块都允许您指定它,因此,我对它的实际设置位置感到困惑。另外,无论如何也可以在客户端访问此标志还是仅在服务器端访问?

【问题讨论】:

  • 设置environment variable 似乎是不错的方法,并且独立于包、模块或IDE。
  • @MukeshSharma:那么我会删除此处列出的所有其他内容吗?我认为React 需要一个 webpack 才能在客户端的生产环境中运行。
  • 是的,但是webpack 再次设置了在服务器上运行的node 环境。这里也讨论过。 github.com/gaearon/react-transform-boilerplate/issues/54
  • @ChronBag 考虑到 VS 和 Powershell 引用,您似乎正在 Windows 上运行。您是否打算在 IISNode 中运行它?如果是这样,您实际上将在您的Web.config 中设置您的NODE_ENV
  • @peteb:我使用 Windows 进行开发,使用 Linux 进行生产,这样只会增加更多的混乱。

标签: javascript node.js coding-style environment-variables


【解决方案1】:

在您指定的场景中,NODE_ENV 环境变量将由实际执行您的代码的进程初始化。请参阅以下来自environment variable wikipedia 的摘录。

在所有 Unix 和类 Unix 系统中,每个进程都有自己独立的一组环境变量。默认情况下,当创建一个进程时,它会继承其父进程的重复环境,但父进程在创建子进程时所做的显式更改除外。在 API 级别,这些更改必须在运行 fork 和 exec 之间完成。或者,从 bash 等命令 shell 中,用户可以通过 env 或使用 ENVIRONMENT_VARIABLE=VALUE <command> 表示法间接调用特定命令调用来更改环境变量。所有 Unix 操作系统风格、DOS 和 Windows 都有环境变量;但是,它们并不都使用相同的变量名。正在运行的程序可以访问环境变量的值以进行配置。

因此,如果您要使用pm2 运行代码,那么pm2 实际上会在执行您的应用程序之前分配NODE_ENV 环境变量。它使用JSON file for options,您可以在其中使用env 属性指定环境变量。

简而言之,设置NODE_ENV 的所有方法或多或少都是等效的,这归结为谁开始您的流程。

由于环境变量是机器本地的(环境),它们是在本地设置的,不能由客户端设置。

【讨论】:

  • 所以你说的是pm2 将覆盖所有其他六个标志,所以我不妨删除它们。好的,谢谢。
  • 就像我说的,这完全取决于实际执行您的应用程序的进程,即决定环境变量设置的进程
  • 是的,我的意思是如果我使用 pm2。所以,如果我用 node 执行它,那么 { "scripts": { "start": "NODE_ENV=production" } } 会赢,如果我用 VS Code 执行它,那么 { "configurations": { "env": "NODE_ENV": "development" } } 会赢,对吧?
猜你喜欢
  • 2013-07-27
  • 2017-03-20
  • 2013-07-19
  • 2012-05-03
  • 1970-01-01
  • 1970-01-01
  • 2021-03-30
  • 1970-01-01
  • 2011-12-30
相关资源
最近更新 更多