關(guān)于Node.js中__dirname、__filename以及./的一些小坑總結(jié)

1、node命令路徑與js文件路徑

node命令路徑為node命令所執(zhí)行的目錄,js文件路徑指的是你要運(yùn)行的js所在的目錄。


如上圖所示: server.js路徑為E:\zyp; node命令路徑我們可以選擇 E:\E:\node,即:

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

后續(xù)我們將通過以上兩個(gè)不同的node命令來運(yùn)行server.js文件,分別對本文標(biāo)題所涉及的一些概念進(jìn)行測試,畢竟計(jì)算機(jī)是不是說慌的!

2、相對地址轉(zhuǎn)絕對地址

我們可以通過引入path內(nèi)置模塊,并使用其resolve()方法將相對路徑轉(zhuǎn)換為絕對路徑。
server.js:

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

運(yùn)行:

E:\zpy>node server.js

結(jié)果:

E:\zpy
E:\
3、比較__dirname、__filename以及./

server.js內(nèi)容:

const path = require("path");

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

E:\zpy>運(yùn)行命令:

E:\zpy>node server.js

運(yùn)行結(jié)果:

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

E:\>運(yùn)行命令:

E:\>node zpy/server.js

運(yùn)行結(jié)果:

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

小結(jié):

  • __dirname: 返回js所在文件夾的絕對路徑
  • __filename: 返回被執(zhí)行的 js 的絕對路徑
  • ./: 返回執(zhí)行 node 命令的絕對路徑
4、再來看一個(gè)問題:

server同級創(chuàng)建一個(gè)名字為mo.js的文件,該文件內(nèi)容:

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

server.js內(nèi)容修改如下:

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

目前目錄結(jié)構(gòu)如下:



E:\zpy>運(yùn)行命令:

E:\zpy>node server.js

運(yùn)行結(jié)果:

http://www.zhangpeiyue.com

E:\>運(yùn)行命令:

E:\>node zpy/server.js

運(yùn)行結(jié)果:

http://www.zhangpeiyue.com

通過以上命令運(yùn)行結(jié)果,你會(huì)驚訝的發(fā)現(xiàn):在兩種不同的node命令路徑下,request引入地址采用相對地址"./"的情況下,不僅沒有發(fā)生異常,而且都可以調(diào)用到mo.js!

那是因?yàn)?code>request中的路徑總是相對于包含它的文件,跟你的工作目錄是沒有半毛錢關(guān)系的。

總結(jié):"./"require() 中使用與__dirname 的效果相同,不會(huì)因?yàn)檫\(yùn)行腳本的目錄不同而發(fā)生改變。

5、建議

使用require() 時(shí)可采用相對路徑(./, ../) 的寫法,其他務(wù)必使用絕對路徑。例如:

// 與當(dāng)前文件同目錄下的server.js
 path.dirname(__filename) + '/server.js'; 

// 當(dāng)前目錄的上一級下的zpy文件中的server.js
 path.resolve(__dirname, '../zpy/server.js');
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容