Node.js 中 __dirname 和 ./ 的區別噠噠噠
阿新 • • 發佈:2018-12-08
概要
Node.js 中,__dirname
總是指向被執行 js 檔案的絕對路徑,所以當你在 /d1/d2/myscript.js
檔案中寫了 __dirname
, 它的值就是 /d1/d2
。
相反,./
會返回你執行 node 命令的路徑,例如你的工作路徑。
有一個特殊情況是在 require()
中使用 ./
時,這時的路徑就會是含有 require()
的指令碼檔案的相對路徑。
例如
假設有如下目錄結構
/dir1 /dir2 pathtest.js
- 1
- 2
- 3
然後在 pathtest.js 中,有如下程式碼
var path = require("path");
console.log(". = %s", path.resolve("."));
console.log("__dirname = %s", path.resolve(__dirname));
- 1
- 2
- 3
然後執行了下面命令
cd /dir1/dir2
node pathtest.js
- 1
- 2
將會得到
. = /dir1/dir2
__dirname = /dir1/dir2
- 1
- 2
.
是你的當前工作目錄,在這個例子中就是 /dir1/dir2
,__dirname
是 pathtest.js
的檔案路徑,在這個例子中就是 /dir1/dir2
。
然而,如果我們的工作目錄是 /dir1
cd /dir1
node dir2/pathtest.js
- 1
- 2
將會得到
. = /dir1
__dirname = /dir1/dir2
- 1
- 2
此時,.
指向我們的工作目錄,即 /dir1
, __dirname
/dir1/dir2
。
在 require
中使用 .
如果在 dir2/pathtest.js
中呼叫了 require
方法,去引入位於 dir1
目錄的 js 檔案,你需要寫成
require('../thefile')
- 1
因為 require
中的路徑總是相對於包含它的檔案,跟你的工作目錄沒有關係。
更多參考:淺析 NodeJs 的幾種檔案路徑