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.


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

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

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


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.


0
getUserRootFolder() {
  return process.env.HOME || process.env.HOMEPATH || process.env.USERPROFILE;
}
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.