1

在最近的一个 nodejs 项目中,我遇到了一件很奇怪的事情:我在 .env 文件中设置了 HOSTNAME 变量,当它包含在 .js 文件中时,HOSTNAME 的值与 .env 中的不同。为什么

--

情况

.env

HOSTNAME=foo.bar.com

服务器.js

require('dotenv').config();
console.log("Hostname: ", process.env.HOSTNAME);

控制台输出

Hostname: foo

预期的控制台输出

Hostname: foo.bar.com

--

调试

  • Nodejs 应用程序安装在 windows server 2008 上,其中机器的 DNS 条目是 foo.bar.com。从 Intranet 甚至可以通过“ http://foo ”访问该机器(无论出于何种原因)。
  • 该服务器上没有其他 nodejs 应用程序运行
  • 问题只发生在 HOSTNAME 上,没有其他变量名(至少不是我能找到的)
  • 如果 HOSTNAME=localhost 并且我从服务器浏览器运行应用程序,则工作得很好
  • 如果我将 HOSTNAME 重命名为 _HOSTNAME (并替换我的代码中所有出现的 HOSTNAME),则工作得很好
  • 如果我在本地机器上运行代码并且只有一个 .hosts 条目“127.0.0.1 foo.bar.com”,则工作得很好

我已经通过重命名为 _HOSTNAME 解决了这个问题,但我想知道为什么会发生这种情况,以及是否有其他 .env 变量名可能会受到这种奇怪事件的影响

4

1 回答 1

2

dotenvnpm 库跳过已经在宿主环境中设置的变量。您可以在官方文档中找到有关覆盖现有系统变量的更多信息。

https://github.com/motdotla/dotenv#what-happens-to-environment-variables-that-were-already-set

于 2019-09-02T16:00:13.820 回答