node - path路徑


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

node命令路徑為node命令所執行的目錄,js文件路徑指的是你要運行的js所在的目錄。

img

如上圖所示: server.js路徑為E:\zypnode命令路徑我們可以選擇 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);

目前目錄結構如下:

img


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');


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM