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.