Node.js - Rechercher un répertoire personnel de manière indépendante de la plateforme

215

Process.platform renvoie "win32" pour Windows. Sous Windows, le répertoire de base d'un utilisateur peut être C: \ Users [USERNAME] ou C: \ Documents and Settings [USERNAME] selon la version de Windows utilisée. Sous Unix, ce n'est pas un problème.

Matthieu
la source
Mac OS X conserve-t-il la méthode Unix ou nécessite-t-il également quelque chose de différent?
hippietrail
2
@hippietrail Mac OS X utilise HOME comme tous les autres Unix.
Marnen Laibow-Koser

Réponses:

331

Comme mentionné dans une réponse plus récente , la méthode préférée est maintenant simplement:

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

[Réponse originale] : Pourquoi ne pas utiliser la USERPROFILEvariable d'environnement sur win32?

function getUserHome() {
  return process.env[(process.platform == 'win32') ? 'USERPROFILE' : 'HOME'];
}
maerics
la source
Je vous remercie. Je viens d'installer Node.js localement, car la construction d'un serveur de base sur Cloud9 ne suit pas mon petit tutoriel (bien sûr) ... et n'avait aucune idée où mettre mes fichiers. Tu es l'homme! (Je suppose)
Steve
En 0.10.33, gagnez 64 bits, cela ne fonctionne pas. J'ai USERPROFILE et HOME définis sur C: Mon entreprise me force à avoir un HOMEDRIVE / HOMEPATH défini sur un partage réseau H :. Pour une raison quelconque, le nœud préfère H :.
Angus
9
J'ai une réaction viscéralement négative à cette réponse et à la deuxième réponse la plus populaire. Si vous utilisez node.js, alors à mon humble avis, vous devriez privilégier les modules npm comme os.homedir () et osenv.home () (tous deux mentionnés ci-dessous). Si vous regardez la source de os.homedir (), vous verrez que ce n'est pas si simple.
Larry Maccherone
Ce n'est pas un moyen indépendant de la plateforme.
Michael
enroulant un path.resolve()pourrait fournir une certaine normalisation en termes de barres obliques de fuite, potentiellement étrange avant / barre oblique inverse, etc ... (surtout si vous avez des opérations de fichiers à l' esprit, après avoir obtenu cette information)
Frank Nocke
237

os.homedir()a été ajouté par ce PR et fait partie de la version publique 4.0.0 de nodejs.


Exemple d'utilisation:

const os = require('os');

console.log(os.homedir());
Cody Allan Taylor
la source
Bienvenue dans Stack Overflow! Veuillez vous assurer de formuler votre réponse comme une réponse et non comme une question.
durron597
2
Je l'ai. Ajout de sources car os.homedir()c'est un sacré nouveau jouet.
Cody Allan Taylor
8
devrait être acceptée réponse car il est compatible multiplateforme
Yahya Uddin
2
Vous devez const os = require('os');également ajouter
Roel
81

Eh bien, il serait plus précis de s'appuyer sur la fonction et non sur une valeur variable. D'autant plus qu'il y a 2 variables possibles pour Windows.

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

EDIT : comme mentionné dans une réponse plus récente, https://stackoverflow.com/a/32556337/103396 est la bonne voie à suivre ( require('os').homedir()).

Oncle Tom
la source
1
Sur ma machine Windows 7, HOMEPATH et USERPROFILE renvoient la même chose (C: \\ Users \\ Username). HOME renvoie indéfini. Sur mon Mac, HOME renvoie / Users / Username et HOMEPATH et USERPROFILE reviennent non définis.
Ben Clayton
1
sur ma machine Windows 7, HOMEPATH revient \users\nameet USERPROFILE a c:\users\name. Cette méthode n'est donc pas aussi précise et robuste que @maerics '
PA.
15

Utilisez osenv.home(). Il est maintenu par isaacs et je crois qu'il est utilisé par npm lui-même.

https://github.com/isaacs/osenv

Andrew De Andrade
la source
1
oshomeutilise os-homedirsous le capot, si vous ne voulez que cette fonctionnalité.
spiffytech du
0
getUserRootFolder() {
  return process.env.HOME || process.env.HOMEPATH || process.env.USERPROFILE;
}
aH6y
la source