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.


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'];
}

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());

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()).


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.


0
getUserRootFolder() {
  return process.env.HOME || process.env.HOMEPATH || process.env.USERPROFILE;
}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.