首页 > 解决方案 > 使用 electron-builder 的 snap 安装程序的默认主目录

问题描述

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

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

标签: electronelectron-buildersnapcraft

解决方案


请注意,这~/不是有效路径;它$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 文档

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

推荐阅读