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.

Matius
sumber
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'];
}
maerics
sumber
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());
Cody Allan Taylor
sumber
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()).

Oncle Tom
sumber
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.
15

Gunakan osenv.home(). Itu dikelola oleh isaacs dan saya percaya digunakan oleh npm sendiri.

https://github.com/isaacs/osenv

Andrew De Andrade
sumber
1
oshomegunakan di os-homedirbawah tenda, jika Anda hanya menginginkan fungsi itu.
spiffytech
0
getUserRootFolder() {
  return process.env.HOME || process.env.HOMEPATH || process.env.USERPROFILE;
}
aH6y
sumber