process.cwd()と__dirnameの違いは何ですか?


303

違いは何ですか

console.log(process.cwd())

そして

console.log(__dirname);

どちらも同じようなコンテキストで使用されているのを見てきました。

回答:


486

process.cwd() 現在の作業ディレクトリを返します。

つまり、nodeコマンドを呼び出したディレクトリ。

__dirname JavaScriptソースコードファイルを含むディレクトリのディレクトリ名を返します


5
これは、それprocess.cwd()が.を除くすべてのケースと同義であることを意味しrequire()ますか?
— Alexander Gonchiy

10
正しい@AlexanderGonchiy、.に対するものであるprocess.cwd()点を除いて、(そう同義)require()現在実行中のファイルに対して働きます。詳細はこちらをご覧ください。
— 2015年

1
現在の作業ディレクトリは、実行時にprocess.chdirを使用して変更できるため、必ずしもノードが呼び出されたディレクトリとは限りません。
— masterxilo

85

ノードのjs ドキュメントに従って process.cwd()

cwdグローバルオブジェクトのメソッドでprocess、Node.jsプロセスの現在の作業ディレクトリである文字列値を返します。

ノードのjs ドキュメントに従って __dirname

文字列値としての現在のスクリプトのディレクトリ名。__dirnameは実際にはグローバルではなく、各モジュールに対してローカルです。

例で説明しましょう

main.js内部にファイルが存在し、これらの両方の値C:/Project/main.js を実行するnode main.jsと同じファイルが返されると仮定します

または単に次のフォルダ構造で

Project 
├── main.js
└──lib
   └── script.js

main.js

console.log(process.cwd())
// C:\Project
console.log(__dirname)
// C:\Project
console.log(__dirname===process.cwd())
// true

私たちは別のファイルがあるとしscript.jsたプロジェクトすなわちのサブディレクトリ内のファイルC:/Project/lib/script.jsと実行node main.jsが必要ですscript.js

main.js

require('./lib/script.js')
console.log(process.cwd())
// C:\Project
console.log(__dirname)
// C:\Project
console.log(__dirname===process.cwd())
// true

script.js

console.log(process.cwd())
// C:\Project
console.log(__dirname)
// C:\Project\lib
console.log(__dirname===process.cwd())
// false

9

それぞれのスコープを知っていると、物事を覚えやすくなります。

processis nodeのグローバルオブジェクトであり.cwd()、ノードが実行されている場所を返します。

__dirnameis moduleのプロパティであり、モジュールのファイルパスを表します。ノードでは、1つのモジュールが1つのファイルに存在します。

同様に、モジュールのファイル名を保持する__filename別moduleののプロパティです。


0

$ find proj

proj
proj/src
proj/src/index.js

$ cat proj/src/index.js

console.log("process.cwd() = " + process.cwd());
console.log("__dirname = " + __dirname);

$ cd proj; node src/index.js

process.cwd() = /tmp/proj
__dirname = /tmp/proj/src
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.