Node.js - Encontre o diretório inicial de maneira independente da plataforma

214

Process.platform retorna "win32" para Windows. No Windows, o diretório inicial do usuário pode ser C: \ Users [USERNAME] ou C: \ Documents and Settings [USERNAME], dependendo da versão do Windows que está sendo usada. No Unix, isso não é um problema.

Mateus
fonte
O Mac OS X mantém o método Unix ou requer algo diferente também?
Hippietrail 19/12/12
2
@hippietrail O Mac OS X usa o HOME como qualquer outro Unix.
Marnen Laibow-Koser

Respostas:

330

Como mencionado em uma resposta mais recente , a maneira preferida agora é simplesmente:

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

[Resposta original] : Por que não usar a USERPROFILEvariável de ambiente no win32?

function getUserHome() {
  return process.env[(process.platform == 'win32') ? 'USERPROFILE' : 'HOME'];
}
maerics
fonte
Obrigado. Acabei de instalar o Node.js localmente, pois a construção de um servidor básico no Cloud9 não está seguindo meu pequeno tutorial (é claro) ... e não tinha IDÉIA onde colocar meus arquivos. Você é o cara! (Suponho) #
2474 Steve Steve
Na 0.10.33, vitória em 64 bits, isso não funciona. Eu tenho USERPROFILE e HOME definidos como C: minha empresa me obriga a ter um HOMEDRIVE / HOMEPATH definido como um compartilhamento de rede H :. Por alguma razão, o nó prefere H :.
Angus
9
Eu tenho uma reação visceralmente negativa a essa resposta e a segunda mais popular. Se você estiver usando o node.js, então o IMHO, deve favorecer módulos npm como os.homedir () e osenv.home () (ambos mencionados abaixo). Se você procurar na fonte os.homedir (), verá que não é tão simples assim.
Larry Maccherone
Este não é um meio independente de plataforma.
Michael
envolvendo um path.resolve()pode fornecer alguma normalização em termos de barras à direita, potencialmente estranho frente / barras invertidas, etc ... (especialmente se você tem operações de arquivo em mente, depois de obter essa informação)
Frank Nocke
237

os.homedir()foi adicionado por este PR e faz parte do lançamento público 4.0.0 do nodejs.


Exemplo de uso:

const os = require('os');

console.log(os.homedir());
Cody Allan Taylor
fonte
Bem-vindo ao Stack Overflow! Certifique-se de formular sua resposta como uma resposta , não como uma pergunta.
durron597
2
Entendi. Fontes adicionadas porque os.homedir()é um brinquedo novo e muito danado.
Cody Allan Taylor
8
deve ser resposta aceita como ela é multiplataforma compatível
Yahya Uddin
2
Você precisa adicionar const os = require('os');também
Roel
81

Bem, seria mais preciso confiar no recurso e não em um valor variável. Especialmente porque existem 2 variáveis ​​possíveis para o Windows.

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

EDIT : como mencionado em uma resposta mais recente, https://stackoverflow.com/a/32556337/103396 é o caminho certo a seguir ( require('os').homedir()).

Oncle Tom
fonte
1
Na minha máquina com Windows 7, HOMEPATH e USERPROFILE retornam a mesma coisa (C: \\ Users \\ Username). HOME retorna indefinido. No meu Mac, HOME retorna / Usuários / Nome de usuário e HOMEPATH e USERPROFILE retornam indefinidos.
Ben Clayton
1
na minha máquina Windows 7, o HOMEPATH retorna \users\namee o USERPROFILE c:\users\name. Portanto, esse método não é tão preciso e robusto quanto o @maerics '
PA.
15

Use osenv.home(). É mantido pelo isaacs e acredito que seja usado pelo próprio npm.

https://github.com/isaacs/osenv

Andrew De Andrade
fonte
1
oshomeusa os-homedirsob o capô, se você quiser apenas essa funcionalidade.
Spiffytech 12/12/2015
0
getUserRootFolder() {
  return process.env.HOME || process.env.HOMEPATH || process.env.USERPROFILE;
}
aH6y
fonte