Домашний каталог по умолчанию для установщика оснастки с помощью electronic-builder

В настоящее время я создаю электронное приложение, собирая установщик, такой как .deb и .snap, с электронным построителем. Внутри приложения мне по какой-то причине нужен доступ к домашнему каталогу пользователя, и я использую process.env.HOME || process.env.USERPROFILE для получения домашнего каталога (также app.getPath('home') возвращает то же самое). Это работает правильно для других случаев, но когда приложение установлено с .snap, вместо фактического домашнего (/home/username) каталога это возвращает ~/snap/<app_name>/3/ в качестве домашнего каталога. (3 - номер версии оснастки)

Как мне получить реальный домашний каталог (/home/username) во всех случаях?


person Eular    schedule 18.01.2021    source источник
comment
Привет! Если на ваш вопрос был дан ответ, рассмотрите возможность проголосовать / принять, используя зеленую галочку рядом с ответом.   -  person snwflk    schedule 02.02.2021


Ответы (1)


Обратите внимание, что ~/ не является допустимым путем; оболочка расширяет его до $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:

Значение homedir, возвращаемое os.userInfo (), предоставляется операционной системой. Это отличается от результата 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
person snwflk    schedule 18.01.2021
comment
когда я использую showSaveDialog (electronicjs.org/docs/api/dialog), он открывается запустите наутилус, например файловый проводник (в ubuntu). Если я нажму на вкладку Home, откроется ~/snap/<app_name>/3/. Для новых пользователей это сбивает с толку, поскольку отображается как Home, но не открывает дом пользователя. Есть ли способ это исправить? - person Eular; 19.01.2021
comment
@Eular, это отдельный (и интересный) вопрос! Я считаю, что это должен быть отдельный вопрос SO, а не скрытый в комментариях! - person snwflk; 19.01.2021
comment
добавлен как дополнительная часть вопроса - person Eular; 20.01.2021
comment
@Eular, ваше существенное редактирование вопроса означает признание недействительным ранее подходящего ответа и усилий, которые были затрачены на его разработку. В вашем исходном вопросе никоим образом не упоминается диалог сохранения / открытия, дополнение, которое создает совершенно другую проблему. Я настоятельно рекомендую вам откатить редактирование и опубликовать новый вопрос, в котором вы спрашиваете, в чем, по-видимому, ваша настоящая проблема, а не изменять существующий вопрос, на который был дан ответ! - person snwflk; 21.01.2021
comment
done @ stackoverflow.com/questions / 65872077 / - person Eular; 24.01.2021