Node.js - Finden Sie das Home-Verzeichnis plattformunabhängig


214

Process.platform gibt "win32" für Windows zurück. Unter Windows kann das Ausgangsverzeichnis eines Benutzers C: \ Benutzer [USERNAME] oder C: \ Dokumente und Einstellungen [USERNAME] sein, je nachdem, welche Windows-Version verwendet wird. Unter Unix ist dies kein Problem.


Behält Mac OS X die Unix-Methode bei oder erfordert es auch etwas anderes?
Hippietrail

2
@hippietrail Mac OS X verwendet HOME wie jedes andere Unix.
Marnen Laibow-Koser

Antworten:


330

Wie in einer neueren Antwort erwähnt , ist der bevorzugte Weg jetzt einfach:

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

[Originalantwort] : Warum nicht die USERPROFILEUmgebungsvariable unter win32 verwenden?

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

Danke dir. Ich habe gerade Node.js lokal installiert, da das Erstellen eines Basisservers auf Cloud9 (natürlich) nicht meinem kleinen Tutorial folgt ... und keine Ahnung hatte, wo ich meine Dateien ablegen soll. Du bist der Mann! (Ich nehme an)
Steve

In 0.10.33 Win 64bit funktioniert dies nicht. Ich habe USERPROFILE und HOME auf C: Mein Unternehmen zwingt mich, ein HOMEDRIVE / HOMEPATH auf eine Netzwerkfreigabe H: einzustellen. Aus irgendeinem Grund bevorzugt der Knoten H:.
Angus

9
Ich habe eine viszeral negative Reaktion auf diese und die zweitbeliebteste Antwort. Wenn Sie node.js verwenden, sollten Sie IMHO npm-Module wie os.homedir () und osenv.home () (beide unten erwähnt) bevorzugen. Wenn Sie sich die Quelle für os.homedir () ansehen, werden Sie feststellen, dass dies nicht so einfach ist.
Larry Maccherone

Dies ist kein plattformunabhängiges Mittel.
Michael

Das Umschließen eines path.resolve()kann eine gewisse Normalisierung in Bezug auf nachgestellte Schrägstriche, möglicherweise ungerade Vorwärts- / Rückwärts-Schrägstriche usw. bewirken (insbesondere, wenn Sie nach Erhalt dieser Informationen an Dateivorgänge denken)
Frank Nocke,

237

os.homedir()wurde von dieser PR hinzugefügt und ist Teil der öffentlichen Version 4.0.0 von nodejs.


Anwendungsbeispiel:

const os = require('os');

console.log(os.homedir());

Willkommen bei Stack Overflow! Bitte stellen Sie sicher, dass Sie Ihre Antwort als Antwort und nicht als Frage formulieren.
Durron597

2
Verstanden. Quellen hinzugefügt, weil os.homedir()es ein verdammt neues Spielzeug ist.
Cody Allan Taylor

8
sollte als Antwort akzeptiert werden, da es plattformübergreifend kompatibel ist
Yahya Uddin

2
Sie müssen hinzufügen const os = require('os');zu
Roel

81

Nun, es wäre genauer, sich auf die Funktion und nicht auf einen variablen Wert zu verlassen. Zumal es für Windows 2 mögliche Variablen gibt.

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

BEARBEITEN : Wie in einer neueren Antwort erwähnt, ist https://stackoverflow.com/a/32556337/103396 der richtige Weg ( require('os').homedir()).


1
Auf meinem Windows 7-Computer geben HOMEPATH und USERPROFILE dasselbe zurück (C: \\ Benutzer \\ Benutzername). HOME gibt undefiniert zurück. Auf meinem Mac gibt HOME / Users / Username und HOMEPATH und USERPROFILE undefined zurück.
Ben Clayton

1
Auf meinem Windows 7-Computer kehrt HOMEPATH zurück \users\nameund USERPROFILE hat c:\users\name. Diese Methode ist also nicht so genau und robust wie @maerics '
PA.


0
getUserRootFolder() {
  return process.env.HOME || process.env.HOMEPATH || process.env.USERPROFILE;
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.