1床牧、node命令路徑與js文件路徑
node
命令路徑為node
命令所執(zhí)行的目錄,js
文件路徑指的是你要運行的js
所在的目錄遭贸。
如上圖所示:
server.js
路徑為E:\zyp
戈咳; node
命令路徑我們可以選擇 E:\
或 E:\node
,即:
E:\zpy>node server.js
E:\>node zpy/server.js
后續(xù)我們將通過以上兩個不同的node
命令來運行server.js
文件壕吹,分別對本文標題所涉及的一些概念進行測試著蛙,畢竟計算機是不是說慌的!
2耳贬、相對地址轉(zhuǎn)絕對地址
我們可以通過引入path內(nèi)置模塊踏堡,并使用其resolve()
方法將相對路徑轉(zhuǎn)換為絕對路徑。
server.js:
const path = require("path");
console.log(path.resolve("./"));
運行:
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>
運行命令:
E:\zpy>node server.js
運行結(jié)果:
__dirname: E:\zpy
__filename: E:\zpy\server.js
./: E:\zpy
E:\>
運行命令:
E:\>node zpy/server.js
運行結(jié)果:
__dirname: E:\zpy
__filename: E:\zpy\server.js
./: E:\
小結(jié):
- __dirname: 返回
js
所在文件夾的絕對路徑 - __filename: 返回被執(zhí)行的
js
的絕對路徑 - ./: 返回執(zhí)行
node
命令的絕對路徑
4、再來看一個問題:
在server
同級創(chuàng)建一個名字為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>
運行命令:
E:\zpy>node server.js
運行結(jié)果:
http://www.zhangpeiyue.com
E:\>
運行命令:
E:\>node zpy/server.js
運行結(jié)果:
http://www.zhangpeiyue.com
通過以上命令運行結(jié)果帐偎,你會驚訝的發(fā)現(xiàn):在兩種不同的node
命令路徑下,request引入地址采用相對地址"./"的情況下挤渔,不僅沒有發(fā)生異常肮街,而且都可以調(diào)用到mo.js
!
那是因為request
中的路徑總是相對于包含它的文件,跟你的工作目錄是沒有半毛錢關(guān)系的判导。
總結(jié):"./"
在 require()
中使用與__dirname
的效果相同嫉父,不會因為運行腳本的目錄不同而發(fā)生改變沛硅。
5、建議
使用require()
時可采用相對路徑(./, ../) 的寫法绕辖,其他務(wù)必使用絕對路徑摇肌。例如:
// 與當前文件同目錄下的server.js
path.dirname(__filename) + '/server.js';
// 當前目錄的上一級下的zpy文件中的server.js
path.resolve(__dirname, '../zpy/server.js');