Node.js - Temukan direktori home dengan cara agnostik platform


214

Process.platform mengembalikan "win32" untuk Windows. Pada Windows, direktori home pengguna mungkin adalah C: \ Users [USERNAME] atau C: \ Documents and Settings [USERNAME] tergantung pada versi Windows yang digunakan. Di Unix ini bukan masalah.


Apakah Mac OS X mempertahankan metode Unix atau memerlukan sesuatu yang berbeda juga?
hippietrail

2
@hippietrail Mac OS X menggunakan HOME seperti setiap Unix lainnya.
Marnen Laibow-Koser

Jawaban:


330

Seperti disebutkan dalam jawaban yang lebih baru , cara yang disukai sekarang adalah:

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

[Jawaban Asli] : Mengapa tidak menggunakan USERPROFILEvariabel lingkungan di win32?

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

Terima kasih. Baru saja menginstal Node.js secara lokal, karena membangun server dasar di Cloud9 tidak mengikuti tutorial kecil saya (tentu saja) ... dan TIDAK MEMILIKI IDEA di mana harus meletakkan file saya. Kamulah orangnya! (Saya berasumsi)
Steve

Dalam kemenangan 0.10.33, 64bit ini tidak berfungsi. Saya memiliki USERPROFILE dan HOME yang diatur ke C: Perusahaan saya memaksa saya untuk memiliki HOMEDRIVE / HOMEPATH yang disetel ke jaringan berbagi H :. Untuk beberapa alasan simpul lebih suka H :.
Angus

9
Saya memiliki reaksi negatif terhadap jawaban ini dan yang paling populer kedua. Jika Anda menggunakan node.js, maka IMHO, Anda harus mendukung modul npm seperti os.homedir () dan osenv.home () (keduanya disebutkan di bawah). Jika Anda melihat sumber untuk os.homedir (), Anda akan melihat bahwa ini tidak sesederhana ini.
Larry Maccherone

Ini bukan sarana platform agnostik.
Michael

membungkus path.resolve()mungkin memberikan beberapa normalisasi dalam hal trailing slash, berpotensi forward / backslash aneh, dll ... (terutama jika Anda mendapatkan operasi file dalam pikiran, setelah mendapatkan info ini)
Frank Nocke

237

os.homedir()ditambahkan oleh PR ini dan merupakan bagian dari rilis 4.0.0 publik dari nodejs.


Contoh penggunaan:

const os = require('os');

console.log(os.homedir());

Selamat Datang di Stack Overflow! Pastikan frase jawaban Anda sebagai jawaban , bukan pertanyaan.
durron597

2
Mengerti. Sumber yang ditambahkan karena os.homedir()merupakan mainan baru yang sangat menyedihkan.
Cody Allan Taylor

8
harus diterima jawaban karena platform yang kompatibel
Yahya Uddin

2
Anda perlu menambahkan const os = require('os');juga
Roel

81

Yah, akan lebih akurat untuk mengandalkan fitur dan bukan nilai variabel. Terutama karena ada 2 variabel yang mungkin untuk Windows.

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

EDIT : sebagaimana disebutkan dalam jawaban yang lebih baru, https://stackoverflow.com/a/32556337/103396 adalah cara yang tepat untuk pergi ( require('os').homedir()).


1
Di mesin Windows 7 saya, HOMEPATH dan USERPROFILE mengembalikan hal yang sama (C: \\ Users \\ Username). HOME mengembalikan yang tidak terdefinisi. Di Mac saya pengembalian HOME / Pengguna / Username dan HOMEPATH dan USERPROFILE kembali tidak terdefinisi.
Ben Clayton

1
pada mesin windows 7 saya, HOMEPATH kembali \users\namedan USERPROFILE miliki c:\users\name. Jadi metode ini tidak seakurat dan sekuat @maerics '
PA.


0
getUserRootFolder() {
  return process.env.HOME || process.env.HOMEPATH || process.env.USERPROFILE;
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.