node.js の __dirname と ./ の違いは何ですか? 質問する

node.js の __dirname と ./ の違いは何ですか? 質問する

Node.js でプログラミングし、現在のディレクトリに関連してどこかにあるファイルを参照する場合、__dirname通常の ではなく 変数を使用する理由はありますか./? これまでコードで ./ を使用してきましたが、 の存在を発見したので__dirname、基本的には ./ を に変換するのが賢明かどうか、またそうであれば、なぜそれが賢明な考えなのかを知りたいです。

ベストアンサー1

要旨

Node.jsでは、__dirname常に現在実行中のスクリプトが存在するディレクトリです(これを見て)。したがって、 に と入力した場合__dirname/d1/d2/myscript.js値は になります/d1/d2

対照的に、やなどのライブラリを使用する場合、 はターミナル ウィンドウでコマンド.を実行したディレクトリ (つまり、作業ディレクトリ) を提供します。技術的には、作業ディレクトリから始まりますが、 を使用して変更できます。nodepathfsprocess.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ある場合は、常に次のようにします。requiredir1

require('../thefile')

内部のパスはrequire常に、呼び出し元のファイルに対する相対パスであるためです。作業ディレクトリとは何の関係もありません。

おすすめ記事