Node.js: trova la directory home in modo agnostico sulla piattaforma


215

Process.platform restituisce "win32" per Windows. Su Windows la home directory di un utente potrebbe essere C: \ Users [USERNAME] o C: \ Documents and Settings [USERNAME] a seconda della versione di Windows utilizzata. Su Unix questo non è un problema.


Mac OS X mantiene il metodo Unix o richiede anche qualcosa di diverso?
hippietrail,

2
@hippietrail Mac OS X utilizza HOME come ogni altro Unix.
Marnen Laibow-Koser,

Risposte:


331

Come menzionato in una risposta più recente , il modo preferito ora è semplicemente:

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

[Risposta originale] : Perché non usare la USERPROFILEvariabile d'ambiente su win32?

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

Grazie. Ho appena installato Node.js localmente, poiché la creazione di un server di base su Cloud9 non sta seguendo il mio piccolo tutorial (ovviamente) ... e non aveva IDEA dove mettere i miei file. Tu sei l'uomo! (Presumo)
Steve

In 0.10.33 vinci 64 bit questo non funziona. Ho USERPROFILE e HOME impostati su C: La mia azienda mi costringe a impostare HOMEDRIVE / HOMEPATH su una condivisione di rete H :. Per qualche ragione il nodo preferisce H :.
Angus,

9
Ho una reazione visceralmente negativa a questa risposta e alla seconda più popolare. Se stai usando node.js, quindi IMHO, dovresti favorire i moduli npm come os.homedir () e osenv.home () (entrambi menzionati di seguito). Se guardi la fonte per os.homedir (), vedrai che non è così semplice.
Larry Maccherone,

Questa non è una piattaforma agnostica.
Michael,

il wrapping a path.resolve()potrebbe fornire un po 'di normalizzazione in termini di barre finali, barre / barre rovesciate potenzialmente dispari, ecc ... (specialmente se hai in mente operazioni sui file, dopo aver ottenuto queste informazioni)
Frank Nocke,

237

os.homedir()è stato aggiunto da questo PR e fa parte della versione pubblica 4.0.0 di nodejs.


Esempio di utilizzo:

const os = require('os');

console.log(os.homedir());

Benvenuto in Stack Overflow! Assicurati di formulare la tua risposta come una risposta , non una domanda.
durron597,

2
Fatto. Aggiunte fonti perché os.homedir()è un bel giocattolo dannatamente nuovo.
Cody Allan Taylor,

8
dovrebbe essere accettata la risposta in quanto è compatibile multipiattaforma
Yahya Uddin

2
Devi aggiungere const os = require('os');anche tu
Roel

81

Bene, sarebbe più preciso affidarsi alla funzionalità e non a un valore variabile. Soprattutto perché ci sono 2 possibili variabili per Windows.

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

EDIT : come menzionato in una risposta più recente, https://stackoverflow.com/a/32556337/103396 è la strada giusta da percorrere ( require('os').homedir()).


1
Sul mio computer Windows 7, HOMEPATH e USERPROFILE restituiscono la stessa cosa (C: \\ Users \\ Username). HOME restituisce undefined. Sul mio Mac HOME ritorna / Utenti / Nome utente e HOMEPATH e USERPROFILE restituiscono non definiti.
Ben Clayton,

1
sulla mia macchina Windows 7, HOMEPATH ritorna \users\namee USERPROFILE ha c:\users\name. Quindi questo metodo non è accurato e robusto come @maerics '
PA.


0
getUserRootFolder() {
  return process.env.HOME || process.env.HOMEPATH || process.env.USERPROFILE;
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.