This is the most robust documentation I can find for the process.env
property: https://nodejs.org/api/process.html#process_process_env.
It mentions USER
, but not USERNAME
. On my machine (Windows/Bash), when I print the contents of process.env
, I see USERNAME
(my windows username) but not USER
. Similarly, echo $USERNAME
shows my name but echo $USER
returns nothing.
What is the difference between USER
and USERNAME
? Is it an operating system thing? Are they interchangeable?
In Node. js, process. env is a global variable that is injected during runtime. It is a view of the state of the system environment variables. When we set an environment variable, it is loaded into process.
Environment variables are stored in your system shell that you start node. js from. They are a shell feature that node. js can read/modify.
Environment variables provide information about the environment in which the process is running. We use Node environment variables to handle sensitive data like passwords, which we shouldn't hard code, or configuration details that might change between runs, like what port a server should listen on. In Node.
The documentation about process.env
that you linked to shows an example environment; it is not meant to be normative. process.env
can be basically anything -- its values generally have OS defaults provided by the shell, but ultimately they are controlled by the user and/or the process that launched your process.
ie, a user could run
$ USER=lies node script.js
...and process.env
would not contain the real username.
If you're interested in getting information about the user your process is running as, call os.userInfo()
, which is (mostly1) consistent across platforms.
> os.userInfo()
{ uid: -1,
gid: -1,
username: 'josh',
homedir: 'C:\\Users\\josh',
shell: null }
1 - on Windows, uid
, gid
, and shell
are useless, as seen above
os.userInfo()
calls uv_os_get_passwd
, which returns the actual current effective user, regardless of what's in environment variables.
uv_os_get_passwd
Gets a subset of the password file entry for the current effective uid (not the real uid). The populated data includes the username, euid, gid, shell, and home directory. On non-Windows systems, all data comes from getpwuid_r(3). On Windows, uid and gid are set to -1 and have no meaning, and shell is NULL.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With