Node.js-플랫폼에 관계없이 홈 디렉토리 찾기


214

Process.platform은 Windows의 경우 "win32"를 반환합니다. Windows에서 사용중인 Windows 버전에 따라 사용자의 홈 디렉토리는 C : \ Users [USERNAME] 또는 C : \ Documents and Settings [USERNAME] 일 수 있습니다. 유닉스에서는 이것이 문제가되지 않습니다.


Mac OS X은 Unix 방식을 유지합니까 아니면 다른 방식이 필요합니까?
hippietrail

2
@hippietrail Mac OS X은 다른 모든 Unix와 마찬가지로 HOME을 사용합니다.
Marnen Laibow-Koser

답변:


330

더 최근의 답변 에서 언급했듯이 선호하는 방법은 다음과 같습니다.

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

[원래 답변] : USERPROFILEwin32 에서 환경 변수를 사용하지 않는 이유는 무엇 입니까?

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

감사합니다. Cloud9에 기본 서버를 구축하는 것은 (물론) 내 작은 자습서를 따르지 않고 파일을 넣을 위치에 대한 아이디어가 없으므로 Node.js를 로컬에 설치했습니다. 당신은 남자입니다!
Steve

0.10.33 win 64bit에서는 작동하지 않습니다. USERPROFILE 및 HOME이 C로 설정되어 있습니다. 회사에서 HOMEDRIVE / HOMEPATH를 네트워크 공유 H :로 설정하도록했습니다. 어떤 이유로 노드는 H :를 선호합니다.
Angus

9
나는이 답변에 두 번째로 인기있는 답변에 눈에 띄게 부정적인 반응을 보입니다. node.js, IMHO를 사용하는 경우 os.homedir () 및 osenv.home ()과 같은 npm 모듈을 선호해야합니다 (둘 다 언급). os.homedir ()의 소스를 보면 이것이 간단하지 않다는 것을 알 수 있습니다.
Larry Maccherone

이것은 플랫폼에 구애받지 않는 수단이 아닙니다.
Michael

A는 포장 path.resolve()/ 잠재적 홀수 앞으로 후행 슬래시의 측면에서 약간의 정상화를 제공 할 수있는 등 ... (이 정보를받은 후, 마음에 파일 작업을 가지고 특히 경우) 백 슬래시,
프랭크 Nocke

237

os.homedir()이 PR의해 추가 되었으며 nodejs의 공개 4.0.0 릴리스의 일부입니다.


사용법 예 :

const os = require('os');

console.log(os.homedir());

스택 오버플로에 오신 것을 환영합니다! 질문이 아니라 답변 으로 답을 구하십시오 .
durron597

2
알았다. os.homedir()꽤 대담한 새 장난감 이기 때문에 소스를 추가했습니다 .
코디 앨런 테일러

8
호환 크로스 플랫폼이기 때문에 허용 대답해야한다
야야 Uddin

2
const os = require('os');또한 추가해야합니다
Roel

81

변수 값이 아닌 기능에 의존하는 것이 더 정확합니다. 특히 Windows에는 2 가지 가능한 변수가 있습니다.

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

편집 : 최신 답변에서 언급했듯이 https://stackoverflow.com/a/32556337/103396 이 올바른 방법입니다 ( require('os').homedir()).


1
내 Windows 7 컴퓨터에서 HOMEPATH와 USERPROFILE은 동일한 것을 반환합니다 (C : \\ Users \\ Username). HOME은 정의되지 않은 값을 반환합니다. 내 Mac에서 HOME은 / Users / Username을 반환하고 HOMEPATH 및 USERPROFILE은 정의되지 않은 상태로 반환합니다.
벤 클레이튼

1
내 Windows 7 컴퓨터에서 HOMEPATH가 반환 \users\name되고 USERPROFILE이 c:\users\name있습니다. 따라서이 방법은 @maerics '
PA


0
getUserRootFolder() {
  return process.env.HOME || process.env.HOMEPATH || process.env.USERPROFILE;
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.