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.

Mateo
fuente
¿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'];
}
maerics
fuente
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());
Cody Allan Taylor
fuente
¡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()).

Oncle Tom
fuente
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;
}
aH6y
fuente