为什么 .env 文件的读数是错误的?

Why readings from .env file are wrong?

我有问题。我是 nodejs 的新手,所以修复它可能真的很容易。在主目录中,我有一个 .env 文件。在 main.js 文件中我有:

const express = require('express');
const app = express();
const http = require('http')
const {Pool, Client} = require('pg');
require("dotenv").config();
console.log(process.env.USER);

所以,我只想打印位于 .env 文件中的 USER 变量。这是我的 .env 文件:

USER=postgres
HOST=localhost
DATABASE=postgres
PASSWORD=mysecretpassword
PORT=5432

反正我写console.log(process.env.USER);的时候打印出来的变量不是USER变量(也就是postgres),而是我的pc用户账号(也就是John).这怎么可能?

dotenv 在版本 14.1.0 (2022-01-17) 添加 override 选项您可以使用 override: true 选项到

Override any environment variables that have already been set on your machine with values from your .env file.

require('dotenv').config({ override: true, debug: true })
console.log(process.env.USER);

输出:

[dotenv][DEBUG] "USER" is already defined in `process.env` and WAS overwritten
postgres

USER是系统环境变量,见environ(7)

USER The name of the logged-in user (used by some BSD-derived programs). Set at login time, see section NOTES below.

我没有足够的声誉来发表评论,但是你有没有试过重命名你的变量,添加一个像 DB_ 这样的前缀,这样变量名称就变成了 DB_USERDB_HOST 等.?

也许这个变量已经被进程占用了。而且我个人不喜欢覆盖它们。

您可以在终端中查看 运行 node REPL,然后输入 process.env.

这些是我的 PC 上已经采用的 Node 环境变量(运行 on Windows):

{
  ALLUSERSPROFILE: 'C:\ProgramData',
  APPDATA: 'C:\Users\dizolan\AppData\Roaming',
  ChocolateyInstall: 'C:\ProgramData\chocolatey',
  CommonProgramFiles: 'C:\Program Files\Common Files',
  'CommonProgramFiles(x86)': 'C:\Program Files (x86)\Common Files',
  CommonProgramW6432: 'C:\Program Files\Common Files',
  COMPUTERNAME: '...',
  ComSpec: 'C:\Windows\system32\cmd.exe',
  DriverData: 'C:\Windows\System32\Drivers\DriverData',
  FPS_BROWSER_APP_PROFILE_STRING: 'Internet Explorer',
  FPS_BROWSER_USER_PROFILE_STRING: 'Default',
  GOPATH: '...',
  HOMEDRIVE: 'C:',
  HOMEPATH: '...',
  LOCALAPPDATA: '...',
  LOGONSERVER: '...',
  NUMBER_OF_PROCESSORS: '8',
  OneDrive: '...',
  OS: 'Windows_NT',
  Path: '...',
  PATHEXT: '.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY;.PYW',
  POWERSHELL_DISTRIBUTION_CHANNEL: 'MSI:Windows 10 Pro for Workstations',
  PROCESSOR_ARCHITECTURE: 'AMD64',
  PROCESSOR_IDENTIFIER: 'Intel64 Family 6 Model 142 Stepping 12, GenuineIntel',
  PROCESSOR_LEVEL: '6',
  PROCESSOR_REVISION: '8e0c',
  ProgramData: 'C:\ProgramData',
  ProgramFiles: 'C:\Program Files',
  'ProgramFiles(x86)': 'C:\Program Files (x86)',
  ProgramW6432: 'C:\Program Files',
  PSModulePath: 'C:\Program Files\WindowsPowerShell\Modules;C:\Windows\system32\WindowsPowerShell\v1.0\Modules',
  PUBLIC: 'C:\Users\Public',
  SESSIONNAME: 'Console',
  SystemDrive: 'C:',
  SystemRoot: 'C:\Windows',
  TEMP: '...',
  TMP: '...',
  USERDNSDOMAIN: '...',
  USERDOMAIN: '...',
  USERDOMAIN_ROAMINGPROFILE: '...',
  USERNAME: '...',
  USERPROFILE: '...',
  windir: 'C:\Windows'
}