Node.js - 以平台无关的方式查找主目录

298

Process.platform返回"win32"表示运行在Windows系统上。在Windows系统上,用户的主目录可能是C:\Users[USERNAME]或C:\Documents and Settings[USERNAME],这取决于所使用的Windows版本。在Unix系统中,这不是一个问题。


Mac OS X是否保留Unix方法,还是需要使用其他的方法? - hippietrail
3
Mac OS X 使用和其他 Unix 相同的 HOME。 - Marnen Laibow-Koser
6个回答

472

较新的回答中所述,现在首选的方式只是:

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

[Translated Answer] 在win32系统中,为什么不使用USERPROFILE环境变量?

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

谢谢。我刚刚在本地安装了Node.js,因为在Cloud9上构建基本服务器并不遵循我的小教程(当然...),而且我完全不知道该把文件放在哪里。你就是那个人!(我猜) - Steve
在0.10.33 win 64位中,这个不起作用。我已经将USERPROFILE和HOME设置为C:我的公司强制我将HOMEDRIVE / HOMEPATH设置为网络共享H:出于某种原因,节点更喜欢H:。 - Angus
11
我对这个答案和第二受欢迎的答案有一种本能的负面反应。如果你正在使用node.js,那么在我看来,你应该更青睐像os.homedir()和osenv.home()这样的npm模块(下面都提到了)。如果你查看os.homedir()的源代码,你会发现它并不简单。 - Larry Maccherone
这不是一个平台无关的方式。 - Michael
1
path.resolve()进行包装可能会在尾随斜杠、潜在的奇怪正斜杠/反斜杠等方面提供一些规范化(特别是在获取此信息后,如果您考虑文件操作)。 - Frank N
显示剩余3条评论

282

os.homedir()被加入到Node.js的4.0.0公共版本中,相关PR请参阅此处


示例用法:

const os = require('os');

console.log(os.homedir());

2
明白了。添加源代码是因为os.homedir()是一个相当新的工具。 - Cody Allan Taylor
13
应该接受当前答案,因为它可以跨平台兼容。 - Yahya Uddin

83

使用该特性而不是变量值更为准确。尤其是因为 Windows 中存在 2 种可能的变量。

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

编辑:正如最近的一个回答中提到的那样,https://dev59.com/p2ox5IYBdhLWcg3wnlpI#32556337 是正确的方式(require('os').homedir())。


1
在我的 Windows 7 机器上,HOMEPATH 和 USERPROFILE 返回相同的内容(C:\Users\Username)。HOME 返回未定义。在我的 Mac 上,HOME 返回 /Users/Username,而 HOMEPATH 和 USERPROFILE 返回未定义。 - Ben Clayton
1
在我的Windows 7机器上,HOMEPATH返回\users\name,而USERPROFILE则为c:\users\name。因此,这种方法不如@maerics的方法准确和健壮。 - PA.

16

2
oshome 在底层使用 os-homedir ,如果你只需要那个功能的话。 - spiffytech

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

-1

在某些情况下尝试使用这个:

this.process.env.USERPROFILE

或者

this.nw.process.env.USERPROFILE

即在处理之前添加此代码或this.nw代码


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接