[node.js] Node.jsの__dirname、__ filename、および./に関する要約

1.ノードコマンドパスとjsファイルパス

node command pathは、node commandが実行されるディレクトリであり、js file pathは、実行するjsが配置されているディレクトリを指します。

上の図に示すように、server.jsパスはE:\ userです。ノードコマンドパスとしてE:\またはE:\ nodeを選択できます。つまり、次のようになります。

E:\user>node server.js
E:\>node zpy/server.js

フォローアップでは、上記の2つの異なるノードコマンドを介してserver.jsファイルを実行し、この記事のタイトルに含まれるいくつかの概念をテストします。結局のところ、コンピューターはパニックに陥っています。

2.相対アドレスを絶対アドレスに変換します

パス組み込みモジュールを導入し、そのresolve()メソッドを使用することで、相対パスを絶対パスに変換できます。
server.js

const path = require("path");
console.log(path.resolve("./"));

実行:
E:\user>node server.js
結果:

E:\user
E:\

3. __dirname、__ filename、および./を比較します

server.jsコンテンツ:

const path = require("path");

console.log("__dirname: "+__dirname);
console.log("__filename: "+__filename);
console.log("./: "+path.resolve("./"));

E:\user>次のコマンドを実行します。

E:\user>node server.js

演算結果:

__dirname: E:\uesr
__filename: E:\uesr\server.js
./: E:\uesr

E:\>次のコマンドを実行します。

E:\>node uesr/server.js

演算結果:

__dirname: E:\uesr
__filename: E:\uesr\server.js
./: E:\

概要:

  • __dirname:jsが配置されているフォルダーの絶対パスを返します
  • __filename:実行されたjsの絶対パスを返します
  • ./:ノードコマンドの絶対パスを返します

4.もう1つの質問を見てみましょう。

serverdemo.jsという名前のファイルを作成同じレベルを、ファイルの内容:

module.exports.siteUrl = "http://www.baidu.com";

server.js内容は以下のように改訂されます。

const demo = require("./demo");
console.log(demo.siteUrl);

現在のディレクトリ構造は次のとおりです。

E:\uesr>次のコマンドを実行します。

E:\uesr>node server.js

演算結果:

http://www.baidu.com

E:\>次のコマンドを実行します。

E:\>node uesr/server.js

演算結果:

http://www.baidu.com

上記のコマンドの結果から、2つの異なるノードコマンドパスの下で、リクエストが相対アドレス「./」を使用してアドレスを導入すると、例外がないだけでなく、p.jsもあることに驚かれることでしょう。呼び出すことができます!

これは、リクエスト内のパスが常にそれを含むファイルからの相対パスであり、作業ディレクトリとは関係がないためです。

概要:require()で使用される「./」は__dirnameと同じ効果があり、スクリプトが実行されるディレクトリのために変更されません。

5.提案

** require()を使用する場合、相対パス(./、…/)を使用でき、他の絶対パスを使用する必要があります。**例えば:

// 与当前文件同目录下的server.js
 path.dirname(__filename) + '/server.js'; 

// 当前目录的上一级下的zpy文件中的server.js
 path.resolve(__dirname, '../user/server.js');

おすすめ

転載: blog.csdn.net/u013034585/article/details/105609198