116

Process.platform возвращает «win32» для Windows. В Windows домашний каталог пользователя может быть C: \ Users [USERNAME] или C: \ Documents and Settings [USERNAME] в зависимости от используемой версии Windows. В Unix это не проблема.Node.js - найти домашнюю директорию в агностической платформе

+0

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

+2

@hippietrail Mac OS X использует ДОМА, как и все остальные Unix. –

ответ

169

Почему бы не использовать переменную окружения USERPROFILE на win32?

function getUserHome() { 
    return process.env[(process.platform == 'win32') ? 'USERPROFILE' : 'HOME']; 
} 

EDIT: как указано в более позднем ответе, https://stackoverflow.com/a/32556337/103396 правильный путь (require('os').homedir()).

+0

Это работает. – Matthew

+0

Спасибо. Просто установил Node.js локально, так как создание базового сервера на Cloud9 не соответствует моему небольшому учебнику (конечно) ... и не было ИДЕИ, куда бы поместить мои файлы. Ты мужчина! (Я предполагаю) – Steve

+0

В 0.10.33 победить 64bit это не сработает. У меня USERPROFILE и HOME установлены в C: Моя компания заставляет меня иметь HOMEDRIVE/HOMEPATH, установленную в сетевую папку H :. По какой-то причине узел предпочитает H :. – Angus

77

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

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

EDIT: как указано в более позднем ответе, https://stackoverflow.com/a/32556337/103396 правильный путь (require('os').homedir()).

+0

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

+1

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

14

Использование osenv.home(). Он поддерживается isaacs, и я полагаю, что он используется самим npm.

https://github.com/isaacs/osenv

+1

'oshome' использует [' os-homedir'] (https://www.npmjs.com/package/os-homedir) под капотом, если вы хотите только это функциональность. – spiffytech

161

os.homedir() был добавлен by this PR и является частью общественного 4.0.0 выпуска nodejs.


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

const os = require('os'); 

console.log(os.homedir()); 
+0

Добро пожаловать в переполнение стека! Обязательно укажите свой ответ * в качестве ответа *, а не вопрос. – durron597

+2

Получил. Добавлены источники, потому что 'os.homedir()' является довольно чертовой новой игрушкой. –

+6

должен быть принят как совместимая кросс-платформа –

 Смежные вопросы

  • Нет связанных вопросов^_^