Node.js - Найти домашний каталог в зависимости от платформы


216

Process.platform возвращает «win32» для Windows. В Windows домашним каталогом пользователя может быть C: \ Users [ИМЯ ПОЛЬЗОВАТЕЛЯ] или C: \ Documents and Settings [ИМЯ ПОЛЬЗОВАТЕЛЯ] в зависимости от того, какая версия Windows используется. В Unix это не проблема.


Сохраняет ли Mac OS X метод Unix или ему тоже нужно что-то другое?
hippietrail

2
@hippietrail Mac OS X использует HOME, как и любой другой Unix.
Марнен Лайбоу-Козер

Ответы:


333

Как упоминалось в более недавнем ответе , предпочтительный способ теперь просто:

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

[Оригинальный ответ] : почему бы не использовать USERPROFILEпеременную окружения на win32?

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 :.
Ангус

9
У меня есть внутренне негативная реакция на этот ответ и второй по популярности. Если вы используете node.js, тогда IMHO, вам следует отдать предпочтение модулям npm, таким как os.homedir () и osenv.home () (оба упомянуты ниже). Если вы посмотрите на источник для os.homedir (), вы увидите, что это не так просто.
Ларри Макчероне

Это не платформенное средство.
Майкл

перенос a path.resolve()может обеспечить некоторую нормализацию в терминах конечных слэшей, потенциально нечетных прямых / обратных слешей и т. д. (особенно если вы получили файловые операции после получения этой информации)
Фрэнк

237

os.homedir()был добавлен этим PR и является частью общедоступной версии 4.0.0 nodejs.


Пример использования:

const os = require('os');

console.log(os.homedir());

Добро пожаловать в стек переполнения! Пожалуйста, не забудьте сформулировать свой ответ как ответ , а не как вопрос.
durron597

2
Понял. Добавлены источники, потому что os.homedir()это чертовски новая игрушка.
Коди Аллан Тейлор

8
должен быть принят ответ, так как он совместим с кроссплатформенностью
Яхья Уддин

2
Вы должны добавить const os = require('os');тоже
Roel

81

Что ж, было бы точнее полагаться на функцию, а не на значение переменной. Тем более, что есть 2 возможные переменные для Windows.

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

РЕДАКТИРОВАТЬ : как уже упоминалось в более недавнем ответе, https://stackoverflow.com/a/32556337/103396 - это правильный путь ( require('os').homedir()).


1
На моем компьютере с Windows 7 HOMEPATH и USERPROFILE возвращают одно и то же (C: \\ Users \\ Username). HOME возвращает неопределенное. На моем Mac HOME возвращает / Users / Имя пользователя и HOMEPATH и USERPROFILE возвращают undefined.
Бен Клейтон,

1
на моем компьютере с Windows 7 HOMEPATH возвращается \users\nameи USERPROFILE имеет c:\users\name. Так что этот метод не такой точный и надежный, как @maerics '
PA.


0
getUserRootFolder() {
  return process.env.HOME || process.env.HOMEPATH || process.env.USERPROFILE;
}
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.