ChatGPT解决这个技术问题 Extra ChatGPT

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

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

Mac OS X 是否保留了 Unix 方法,还是也需要一些不同的方法?
@hippietrail Mac OS X 像其他所有 Unix 一样使用 HOME。

m
maerics

a more recent answer 中所述,现在首选的方法很简单:

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

[原答案] 为什么不在win32上使用USERPROFILE环境变量?

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:。
我对这个答案和第二受欢迎的答案有一种发自内心的负面反应。如果您使用的是 node.js,那么恕我直言,您应该喜欢 npm 模块,例如 os.homedir() 和 osenv.home()(都在下面提到)。如果您查看 os.homedir() 的源代码,您会发现它并非如此简单。
这不是平台无关的手段。
包装 path.resolve() 可能会在尾部斜杠、可能奇怪的正斜杠/反斜杠等方面提供一些规范化......(特别是如果您在获得此信息后考虑到文件操作)
C
Cody Allan Taylor

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

示例用法:

const os = require('os');

console.log(os.homedir());

知道了。添加了来源,因为 os.homedir() 是一个相当不错的新玩具。
应该被接受的答案,因为它是兼容的跨平台
C
Community

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

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

编辑:如最近的回答中所述,https://stackoverflow.com/a/32556337/103396 是正确的方法 (require('os').homedir())。


在我的 Windows 7 机器上,HOMEPATH 和 USERPROFILE 返回相同的内容(C:\\Users\\Username)。 HOME 返回未定义。在我的 Mac 上,HOME 返回 /Users/Username 并且 HOMEPATH 和 USERPROFILE 返回未定义。
在我的 Windows 7 机器上,HOMEPATH 返回 \users\name 并且 USERPROFILE 有 c:\users\name。所以这种方法不像@maerics'那样准确和健壮
A
Andrew De Andrade

使用 osenv.home()。它由 isaacs 维护,我相信 npm 本身使用它。

https://github.com/isaacs/osenv


如果您只需要该功能,oshome 会在底层使用 os-homedir
a
aH6y
getUserRootFolder() {
  return process.env.HOME || process.env.HOMEPATH || process.env.USERPROFILE;
}

S
Slava Rozhnev

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

this.process.env.USERPROFILE

或者

this.nw.process.env.USERPROFILE

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