【问题标题】:Node.js - Find home directory in platform agnostic wayNode.js - 以平台无关的方式查找主目录
【发布时间】:2012-02-23 04:54:01
【问题描述】:

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。

标签: node.js filesystems platform-independent home-directory platform-agnostic


【解决方案1】:

正如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() 可能会在尾随斜杠、可能奇怪的正斜杠/反斜杠等方面提供一些规范化...(特别是如果您在获得此信息后考虑到文件操作)跨度>
【解决方案2】:

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


示例用法:

const os = require('os');

console.log(os.homedir());

【讨论】:

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

嗯,依赖特征而不是变量值会更准确。特别是因为 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 返回 undefined。
  • 在我的 windows 7 机器上,HOMEPATH 返回\users\name 和 USERPROFILE 有c:\users\name。所以这种方法不如@maerics'那么准确和健壮
【解决方案4】:

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

https://github.com/isaacs/osenv

【讨论】:

  • oshome 在后台使用 os-homedir,如果您只需要该功能。
【解决方案5】:
getUserRootFolder() {
  return process.env.HOME || process.env.HOMEPATH || process.env.USERPROFILE;
}

【讨论】:

    【解决方案6】:

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

    this.process.env.USERPROFILE
    

    this.nw.process.env.USERPROFILE
    

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

    【讨论】:

      猜你喜欢
      • 2011-02-02
      • 2019-04-12
      • 2017-09-21
      • 1970-01-01
      • 2013-08-17
      • 1970-01-01
      • 2011-10-21
      • 1970-01-01
      • 2017-04-27
      相关资源
      最近更新 更多