nodeJS中關于path.resolve()的用法解析
nodeJS關于path.resolve()用法
path是nodeJS的一個內置模塊,可以直接在其他js文件中導入改模塊,代碼如下
var path = require("path") //node的內置模塊
該模塊導出很多path的方法,如圖1,我們要康康path.resolve() 是怎么用的
圖1 path的方法
path.resolve() 它的作用是拼接路徑,其傳參個數沒有限制,每個參數均表示一段路徑
我們看一個例子
var path = require("path"); const p = path.resolve("./","demo","img"); console.log(p);
【結果】第一行是它的運行目錄,第二行是運行結果
接下來插入另一個變量的概念,__dirname, 在所有情況下,該變量都表示當前運行的js文件所在的目錄,它是一個絕對路徑。
例如,我們在 e:\web\code\11webpack\webpack_jwh\09入口和出口\src 這個路徑下的index.js中寫如下代碼
console.log(__dirname);
則輸出的結果為
在開發(fā)時,當我們使用path.resolve()拼接路徑時,會遇到需要使用絕對路徑的情況,但是當我們把項目部署到服務器時,絕對路徑會發(fā)生變化。
因此,需要一個可以計算的絕對路徑的表達方式。
有了__dirname,我們就可以解決以下問題。
代碼如下 :
var path = require("path"); const p = path.resolve(__dirname,"demo","img"); console.log(p);
這樣不管是什么環(huán)境下,都可以拼接出正確的路徑
nodejs path.resolve解析路徑異常的坑
作為一個后端,今天又解決的前端問題
問題現場
近期項目中,涉及nodejs自動生成文件,其中用到了shelljs。
各種路徑處理比較多,其中有個典型問題:有人習慣用path.resolve(),去解析絕對路徑。
過段時間有人用了shelljs的cd方法(類似于模擬shell命令中的cd命令)。這下扯了,項目各種路徑找不到。
觸發(fā)場景
shelljs使用cd命令后,又使用path.resolve,變成了狀態(tài)編程,自己和自己搞不愉快
原因
path.resolve會默認把shelljs 所在目錄作為父目錄解析絕對路徑
解決辦法
下面隨便用一種:
- 1、不記錄shell的目錄狀態(tài),即不使用cd命令;
- 2、在項目初始化運行時,獲取根目錄常量,公用該處引用;
- 3、使用path.join()去拼接路徑;
- 4、該用fs的用fs,不夠的再拿shell來補。
問題模擬代碼如下:
let shell = ?require('shelljs'); let path = require("path"); shell.cd("E:\\code"); console.log(path.resolve('test')); console.log(path.join('test'));
打印信息:
E:\code\test
test
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
使用Fetch API執(zhí)行GraphQL查詢和變體問題
這篇文章主要介紹了使用Fetch API執(zhí)行GraphQL查詢和變體問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-04-04