为什么 .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_USER
、DB_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'
}
我有问题。我是 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_USER
、DB_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'
}