Node.js - Знайдіть домашній каталог за допомогою агностичного методу платформи


214

Process.platform повертає "win32" для Windows. У домашньому каталозі Windows може бути C: \ Users [USERNAME] або C: \ Документи та налаштування [USERNAME], залежно від того, яка версія Windows використовується. У Unix це не проблема.


Чи зберігає Mac OS X метод Unix або він також вимагає чогось іншого?
hippietrail

2
@hippietrail Mac OS X використовує HOME, як і всі інші Unix.
Marnen Laibow-Koser

Відповіді:


330

Як було сказано в останній відповіді , тепер кращим способом є просто:

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 :.
Angus

9
У мене вісцерально негативна реакція на цю відповідь і на другу за популярністю. Якщо ви використовуєте node.js, то в IMHO, вам слід віддати перевагу модулям npm, таких як os.homedir () та osenv.home () (обидва згадані нижче). Якщо ви подивитесь на джерело для os.homedir (), то побачите, що це не так просто.
Ларрі Макчерон

Це не платформний агностичний засіб.
Майкл

загортання path.resolve()може забезпечити певну нормалізацію в плані нахилу косої риски, потенційно непарних нахилів вперед / назад, і т. д. ... (особливо, якщо ви маєте на увазі операції з файлами після отримання цієї інформації)
Frank Nocke

237

os.homedir()був доданий цим PR і є частиною публічного випуску nodejs 4.0.0.


Приклад використання:

const os = require('os');

console.log(os.homedir());

Ласкаво просимо до переповнення стека! Будь ласка, обов'язково сформулюйте свою відповідь як відповідь , а не питання.
durron597

2
Зрозумів. Додані джерела, тому що os.homedir()це досить проклята нова іграшка.
Коді Аллан Тейлор

8
слід прийняти відповідь, оскільки це сумісна кросова платформа
Yahya Uddin

2
Вам потрібно додати const os = require('os');занадто
Roel

81

Що ж, точніше було б покластися на функцію, а не на змінне значення. Тим більше, що для Windows існує 2 можливі змінні.

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

EDIT : як уже згадувалося в останній відповіді, https://stackoverflow.com/a/32556337/103396 - це правильний шлях ( require('os').homedir()).


1
На моїй машині Windows 7 HOMEPATH та USERPROFILE повертають те саме (C: \\ Користувачі \\ Ім'я користувача). HOME повертається невизначеним. На моєму Mac HOME повернення / Користувачі / Ім'я користувача та HOMEPATH та USERPROFILE повертаються невизначеними.
Бен Клейтон

1
на моїй машині Windows 7 HOMEPATH повертається, \users\nameа USERPROFILE має c:\users\name. Тож цей метод не такий точний і надійний, як @maerics '
ПА.


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