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


214

对于Windows,Process.platform返回“ win32”。在Windows上,用户的主目录可能是C:\ Users [USERNAME]或C:\ Documents and Settings [USERNAME],具体取决于所使用的Windows版本。在Unix上,这不是问题。


Mac OS X是保留Unix方法还是需要其他方法?
hippietrail

2
@hippietrail Mac OS X和其他Unix一样使用HOME。
Marnen Laibow-Koser'3

Answers:


330

最近的回答中所述,首选方法现在很简单:

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

[原创答案]:为什么不在USERPROFILEwin32上使用环境变量?

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

谢谢。刚刚在本地安装了Node.js,因为在Cloud9上构建基本服务器并没有遵循我的小教程(当然)...并且没有将文件放置在何处的想法。你是男人!(我认为)
史蒂夫·

在0.10.33 win 64bit中,这不起作用。我将USERPROFILE和HOME设置为C:我的公司强迫我将HOMEDRIVE / HOMEPATH设置为网络共享H :。由于某种原因,节点更喜欢H:。
安格斯2014年

9
我对此回答有明显的负面反应,是第二受欢迎的回答。如果您使用的是node.js,然后是恕我直言,则应优先使用npm模块,例如os.homedir()和osenv.home()(均在下面提到)。如果查看os.homedir()的源代码,将会发现它不是那么简单。
拉里·麦克切罗尼

这不是平台不可知的手段。
迈克尔

换行path.resolve()可能会在尾部斜杠,可能的奇斜杠/反斜杠等方面提供某种标准化的信息(尤其是如果您在考虑此信息后考虑到文件操作的话)
Frank Nocke

237

os.homedir()由此PR添加的并且是nodejs的公共4.0.0版本的一部分。


用法示例:

const os = require('os');

console.log(os.homedir());

欢迎使用Stack Overflow!请确保将您的答案用短语作为答案,而不是问题。
durron597

2
得到它了。添加了来源,因为这os.homedir()是一个非常令人毛骨悚然的新玩具。
科迪·艾伦·泰勒

8
应该接受的答案,因为它是兼容的跨平台
Yahya Uddin

2
您需要添加const os = require('os');太多
罗尔

81

好吧,依靠功能而不是可变值会更准确。特别是因为Windows有2种可能的变量。

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

编辑:如最近的回答中所述,https://stackoverflow.com/a/32556337/103396是正确的方法(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。


0
getUserRootFolder() {
  return process.env.HOME || process.env.HOMEPATH || process.env.USERPROFILE;
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.