使用电子生成器的快照安装程序的默认主目录 操作系统模块posix 模块

问题描述

我目前正在构建一个电子应用程序,并使用电子构建器构建安装程序,例如 .deb.snap。在应用程序内部,由于某种原因,我需要访问用户主目录,我正在使用 process.env.HOME || process.env.USERPROFILE获取主目录(app.getPath('home') 也返回相同的内容)。这适用于其他情况,但当应用程序与 .snap 一起安装时,而不是实际的主 (/home/username) 目录返回 ~/snap/<app_name>/3/ 作为主目录。 (3 是快照修订号)

如何在所有情况下获取实际的主目录 (/home/username)?

解决方法

注意 ~/ 不是有效路径;它被 shell 扩展为 $HOME。在大多数情况下,您要查找的实际路径为 /home/username。一个简单的解决方案是简单地假设它是主目录。

为了防止主文件夹不在此位置的情况,我们应该询问操作系统:

操作系统模块

const os = require("os");

const user_name = os.userInfo().username;
const user_dir = os.userInfo().homedir;

console.log(user_name,user_dir);

来自NodeJS docs

os.userInfo()返回的homedir的值由操作系统提供。这与 os.homedir() 的结果不同,后者在回退到操作系统响应之前查询主目录的环境变量。

posix 模块

(原始答案)如果由于某种原因上述方法不起作用,您可以明确使用 getpwnam/etc/passwd 中查找实际主目录:

const posix = require("posix");
const os = require("os");

const user_name = os.userInfo().username;
const user_dir = posix.getpwnam(user_name).dir;

console.log(user_name,user_dir);

您需要先安装 posix 模块:

npm install posix

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...