Node.js - Encuentra el directorio de inicio en forma agnóstica de plataforma


214

Process.platform devuelve "win32" para Windows. En Windows, el directorio de inicio de un usuario puede ser C: \ Users [USERNAME] o C: \ Documents and Settings [USERNAME] según la versión de Windows que se esté utilizando. En Unix esto no es un problema.


¿Mac OS X conserva el método Unix o también requiere algo diferente?
hippietrail

2
@hippietrail Mac OS X usa HOME como cualquier otro Unix.
Marnen Laibow-Koser

Respuestas:


330

Como se mencionó en una respuesta más reciente , la forma preferida ahora es simplemente:

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

[Respuesta original] : ¿Por qué no usar la USERPROFILEvariable de entorno en win32?

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

Gracias. Acabo de instalar Node.js localmente, ya que construir un servidor básico en Cloud9 no sigue mi pequeño tutorial (por supuesto) ... y NO tenía IDEA donde colocar mis archivos. ¡Tu eres el hombre! (Asumo)
Steve

En 0.10.33 win 64bit esto no funciona. Tengo USERPROFILE y HOME configurados en C: mi empresa me obliga a tener un HOMEDRIVE / HOMEPATH configurado en un recurso compartido de red H :. Por alguna razón, el nodo prefiere H :.
Angus

99
Tengo una reacción visceralmente negativa a esta respuesta y la segunda más popular. Si está utilizando node.js, en mi humilde opinión, debe favorecer los módulos npm como os.homedir () y osenv.home () (ambos mencionados a continuación). Si observa la fuente de os.homedir (), verá que no es así de simple.
Larry Maccherone

Este no es un medio agnóstico de plataforma.
Michael

envolviendo una path.resolve()podría proporcionar cierta normalización en términos de barras al final, lo que podría extraña adelante / barras invertidas, etc ... (sobre todo si se tiene en cuenta las operaciones de archivo, después de recibir esta información)
Frank Nocke

237

os.homedir()fue agregado por este RP y es parte de la versión pública 4.0.0 de nodejs.


Ejemplo de uso:

const os = require('os');

console.log(os.homedir());

¡Bienvenido a Stack Overflow! Asegúrese de expresar su respuesta como una respuesta , no como una pregunta.
durron597

2
Entendido. Fuentes adicionales porque os.homedir()es un juguete bastante nuevo.
Cody Allan Taylor

8
debe aceptarse la respuesta ya que es compatible multiplataforma
Yahya Uddin

2
Es necesario añadir const os = require('os');también
Roel

81

Bueno, sería más preciso confiar en la función y no en un valor variable. Especialmente porque hay 2 posibles variables para Windows.

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

EDITAR : como se menciona en una respuesta más reciente, https://stackoverflow.com/a/32556337/103396 es el camino correcto a seguir ( require('os').homedir()).


1
En mi máquina con Windows 7, HOMEPATH y USERPROFILE devuelven lo mismo (C: \\ Users \\ Username). HOME regresa indefinido. En mi Mac, HOME devuelve / Users / Username y HOMEPATH y USERPROFILE devuelven sin definir.
Ben Clayton el

1
en mi máquina con Windows 7, HOMEPATH regresa \users\namey USERPROFILE lo ha hecho c:\users\name. Entonces, este método no es tan preciso y robusto como @maerics '
PA.


0
getUserRootFolder() {
  return process.env.HOME || process.env.HOMEPATH || process.env.USERPROFILE;
}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.