Node.js でプログラミングし、現在のディレクトリに関連してどこかにあるファイルを参照する場合、__dirname
通常の ではなく 変数を使用する理由はありますか./
? これまでコードで ./ を使用してきましたが、 の存在を発見したので__dirname
、基本的には ./ を に変換するのが賢明かどうか、またそうであれば、なぜそれが賢明な考えなのかを知りたいです。
ベストアンサー1
要旨
Node.jsでは、__dirname
常に現在実行中のスクリプトが存在するディレクトリです(これを見て)。したがって、 に と入力した場合__dirname
、/d1/d2/myscript.js
値は になります/d1/d2
。
対照的に、やなどのライブラリを使用する場合、 はターミナル ウィンドウでコマンド.
を実行したディレクトリ (つまり、作業ディレクトリ) を提供します。技術的には、作業ディレクトリから始まりますが、 を使用して変更できます。node
path
fs
process.chdir()
例外は、.
を使用する場合ですrequire()
。内部のパスはrequire
常に、 の呼び出しを含むファイルに対する相対パスになりますrequire
。
例えば...
ディレクトリ構造が
/dir1
/dir2
pathtest.js
そしてpathtest.js
含まれる
var path = require("path");
console.log(". = %s", path.resolve("."));
console.log("__dirname = %s", path.resolve(__dirname));
あなたがやる
cd /dir1/dir2
node pathtest.js
あなたは得る
. = /dir1/dir2
__dirname = /dir1/dir2
作業ディレクトリは なので/dir1/dir2
、これが.
解決されます。 はpathtest.js
にあるので/dir1/dir2
、これ__dirname
も解決されます。
ただし、スクリプトを/dir1
cd /dir1
node dir2/pathtest.js
あなたは得る
. = /dir1
__dirname = /dir1/dir2
その場合、作業ディレクトリは/dir1
だったので、 に解決されました.
が、__dirname
それでも に解決されます/dir1/dir2
。
.
内部で使用中require
...
内部にファイルを含める呼び出しがdir2/pathtest.js
ある場合は、常に次のようにします。require
dir1
require('../thefile')
内部のパスはrequire
常に、呼び出し元のファイルに対する相対パスであるためです。作業ディレクトリとは何の関係もありません。