在Node.js中我們常用的幾種文件路徑有以下幾種
__dirname
__filename
process.cwd()
-
./
或者../
在下面的測(cè)試中為了便于比較,我們將./
或者../
這兩個(gè)相對(duì)路徑用path.resolve()
轉(zhuǎn)換成與前邊幾種一樣的絕對(duì)路徑,來看看幾者的區(qū)別.
首先看看我們測(cè)試文件的目錄結(jié)構(gòu)
目錄結(jié)構(gòu)
現(xiàn)在我們?cè)赼.js中寫入如下代碼
var path = require('path');
console.log(__dirname);
console.log(__filename);
console.log(process.cwd());
console.log( path.resolve('./'));
cd 到public目錄下運(yùn)行node a.js,看一下運(yùn)行結(jié)果
運(yùn)行結(jié)果1
這樣子看來,除了__filename
是當(dāng)前js文件的絕對(duì)路徑,其他都是當(dāng)前文件所在目錄的絕對(duì)路徑.
現(xiàn)在我們?cè)赿emo-test目錄下,運(yùn)行node public/a.js,再看看結(jié)果是什么
運(yùn)行結(jié)果2
這個(gè)時(shí)候就能看出一點(diǎn)問題了
__dirname
:總是會(huì)返回當(dāng)前文件所在目錄的絕對(duì)路徑
__filename
:當(dāng)前文件的絕對(duì)路徑
目前看來process.cwd()
和./
兩次運(yùn)行結(jié)果都是一樣的,返回的是運(yùn)行 node 命令時(shí)所在的文件夾的絕對(duì)路徑.
但其實(shí)還有一種特殊情況,就是在require中使用./
,這個(gè)時(shí)候它和__dirname是一樣的不會(huì)因?yàn)檫\(yùn)行node所在的目錄變化而變化,其他情況下都和process.cwd()
一樣返回運(yùn)行node命令時(shí)所在的文件夾的絕對(duì)路徑.