1. ホーム
  2. node.js

[解決済み] node.jsの__dirnameと./の違いは何ですか?

2022-03-17 20:50:18

質問

Node.jsでプログラミングをする際に、カレントディレクトリから離れた場所にあるファイルを参照する場合、そのファイルに対して __dirname 変数ではなく、通常の ./ ? 私はこれまで自分のコードで ./ を使ってきましたが、先ほど __dirname そして、もしそうなら、なぜそれがスマートなアイデアなのかを知りたいのです。

どのように解決するのですか?

要点

Node.jsでは。 __dirname は常に現在実行中のスクリプトが存在するディレクトリ ( ご覧ください ). ですから、もしあなたが __dirname/d1/d2/myscript.js であれば、その値は /d1/d2 .

それに対して . を実行したディレクトリが表示されます。 node のようなライブラリを使用する場合、ターミナルウィンドウのコマンド(つまり、作業ディレクトリ)。 pathfs . 技術的には、最初は作業ディレクトリですが 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 は、常に呼び出したファイルからの相対パスです。作業ディレクトリとは関係ありません。