Matthew
Matthew

Reputation: 11623

Node.js - Find home directory in platform agnostic way

Process.platform returns "win32" for Windows. On Windows a user's home directory might be C:\Users[USERNAME] or C:\Documents and Settings[USERNAME] depending on which version of Windows is being used. On Unix this isn't an issue.

Upvotes: 308

Views: 168930

Answers (6)

maerics
maerics

Reputation: 156534

As mentioned in a more recent answer, the preferred way is now simply:

const homedir = require('os').homedir();

[Original Answer] Why not use the USERPROFILE environment variable on win32?

function getUserHome() {
  return process.env[(process.platform == 'win32') ? 'USERPROFILE' : 'HOME'];
}

Upvotes: 483

MaxProfit Global
MaxProfit Global

Reputation: 1

in some cases try to use this:

this.process.env.USERPROFILE

or

this.nw.process.env.USERPROFILE

i.e. add this or this.nw before process

Upvotes: -1

aH6y
aH6y

Reputation: 476

getUserRootFolder() {
  return process.env.HOME || process.env.HOMEPATH || process.env.USERPROFILE;
}

Upvotes: 4

Cody Allan Taylor
Cody Allan Taylor

Reputation: 3141

os.homedir() was added by this PR and is part of the public 4.0.0 release of nodejs.


Example usage:

const os = require('os');

console.log(os.homedir());

Upvotes: 289

Thom4
Thom4

Reputation: 1879

Well, it would be more accurate to rely on the feature and not a variable value. Especially as there are 2 possible variables for Windows.

function getUserHome() {
  return process.env.HOME || process.env.USERPROFILE;
}

EDIT: as mentioned in a more recent answer, https://stackoverflow.com/a/32556337/103396 is the right way to go (require('os').homedir()).

Upvotes: 83

Andrew De Andrade
Andrew De Andrade

Reputation: 3616

Use osenv.home(). It's maintained by isaacs and I believe is used by npm itself.

https://github.com/isaacs/osenv

Upvotes: 16

Related Questions