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.

Matthew
quelle
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'];
}
Maerics
quelle
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());
Cody Allan Taylor
quelle
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()).

Onkel Tom
quelle
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.
15

Verwenden Sie osenv.home(). Es wird von isaacs gepflegt und ich glaube, es wird von npm selbst verwendet.

https://github.com/isaacs/osenv

Andrew De Andrade
quelle
1
oshomeverwendet os-homedirunter der Haube, wenn Sie nur diese Funktionalität wollen.
Spiffytech
0
getUserRootFolder() {
  return process.env.HOME || process.env.HOMEPATH || process.env.USERPROFILE;
}
aH6y
quelle