1、node命令路徑與js文件路徑
node
命令路徑為node
命令所執行的目錄,js
文件路徑指的是你要運行的js
所在的目錄。
如上圖所示: server.js
路徑為E:\zyp
; node
命令路徑我們可以選擇 E:\
或 E:\node
,即:
E:\zpy>node server.js
E:\>node zpy/server.js
后續我們將通過以上兩個不同的node
命令來運行server.js
文件,分別對本文標題所涉及的一些概念進行測試,畢竟計算機是不是說慌的!
2、相對地址轉絕對地址
我們可以通過引入path內置模塊,並使用其resolve()
方法將相對路徑轉換為絕對路徑。
server.js:
const path = require("path");
console.log(path.resolve("./"));
運行:
E:\zpy>node server.js
結果:
E:\zpy
E:\
3、比較__dirname、__filename以及./
server.js
內容:
const path = require("path");
console.log("__dirname: "+__dirname);
console.log("__filename: "+__filename);
console.log("./: "+path.resolve("./"));
E:\zpy>
運行命令:
E:\zpy>node server.js
運行結果:
__dirname: E:\zpy
__filename: E:\zpy\server.js
./: E:\zpy
E:\>
運行命令:
E:\>node zpy/server.js
運行結果:
__dirname: E:\zpy
__filename: E:\zpy\server.js
./: E:\
小結:
- __dirname: 返回
js
所在文件夾的絕對路徑 - __filename: 返回被執行的
js
的絕對路徑 - ./: 返回執行
node
命令的絕對路徑
4、再來看一個問題:
在server
同級創建一個名字為mo.js
的文件,該文件內容:
module.exports.siteUrl = "http://www.zhangpeiyue.com";
server.js
內容修改如下:
const mo = require("./mo");
console.log(mo.siteUrl);
目前目錄結構如下:
E:\zpy>
運行命令:
E:\zpy>node server.js
運行結果:
http://www.zhangpeiyue.com
E:\>
運行命令:
E:\>node zpy/server.js
運行結果:
http://www.zhangpeiyue.com
通過以上命令運行結果,你會驚訝的發現:在兩種不同的node
命令路徑下,request引入地址采用相對地址"./"的情況下,不僅沒有發生異常,而且都可以調用到mo.js
!
那是因為request
中的路徑總是相對於包含它的文件,跟你的工作目錄是沒有半毛錢關系的。
總結:"./"
在 require()
中使用與__dirname
的效果相同,不會因為運行腳本的目錄不同而發生改變。
5、建議
使用require()
時可采用相對路徑(./, ../) 的寫法,其他務必使用絕對路徑。例如:
// 與當前文件同目錄下的server.js
path.dirname(__filename) + '/server.js';
// 當前目錄的上一級下的zpy文件中的server.js
path.resolve(__dirname, '../zpy/server.js');