Node.js-プラットフォームに依存しない方法でホームディレクトリを検索する


214

Windowsの場合、Process.platformは「win32」を返します。Windowsでは、使用しているWindowsのバージョンに応じて、ユーザーのホームディレクトリがC:\ Users [USERNAME]またはC:\ Documents and Settings [USERNAME]になる場合があります。Unixでは、これは問題ではありません。


Mac OS XはUnixの方法を保持していますか、それとも別の方法が必要ですか?
ヒッピートレイル2012

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をローカルにインストールしただけです...ファイルを配置するためのアイデアがありませんでした。あなたは男です!(私は推測します)
スティーブ

0.10.33 win 64ビットでは、これは機能しません。USERPROFILEとHOMEをCに設定しています。私の会社では、HOMEDRIVE / HOMEPATHをネットワーク共有H:に設定するように強制しています。何らかの理由でノードはH:を好みます。
Angus

9
私はこの回答と2番目に人気のある回答に対して内臓的に否定的な反応を示しています。node.js、次にIMHOを使用している場合は、os.homedir()やosenv.home()などのnpmモジュールを使用する必要があります(どちらも以下で説明します)。os.homedir()のソースを見ると、これは単純ではないことがわかります。
Larry Maccherone

これはプラットフォームにとらわれない手段ではありません。
マイケル、

aをラップするとpath.resolve()、末尾のスラッシュ、奇数のフォワード/バックスラッシュなどの点で正規化が行われる可能性があります(特に、この情報を取得した後にファイル操作を念頭に置いている場合)
Frank Nocke

237

os.homedir()このPRによって追加さ、nodejsの公開4.0.0リリースの一部です。


使用例:

const os = require('os');

console.log(os.homedir());

Stack Overflowへようこそ!質問ではなく、必ず回答として回答してください。
durron597

2
とった。os.homedir()新しいおもちゃなので、ソースを追加しました。
コーディアランテイラー、

8
互換性のあるクロスプラットフォームであるため、回答を受け入れる必要があります
Yahya 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.