今天就跟大家聊聊有關(guān)NodeJs中有哪些文件路徑,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
站在用戶的角度思考問題,與客戶深入溝通,找到臨清網(wǎng)站設(shè)計與臨清網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都做網(wǎng)站、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名注冊、雅安服務(wù)器托管、企業(yè)郵箱。業(yè)務(wù)覆蓋臨清地區(qū)。一、挖坑 & 掉坑:
緣起一段這樣的代碼:
fs.readFile('./docs/use.md', function (err, buffer) { if (err) { return console.log('error: ', err); } console.log('OK'); });
本地運行時一切 OK,線上部署時卻死活找不到 ./docs/use.md 這個文件,后來才發(fā)現(xiàn)是因為線上啟動應(yīng)用時不是從當(dāng)前目錄啟動了,不過為什么啟動腳本的位置也會影響這個路徑呢,且往下看。
二、填坑:
Node 中的文件路徑大概有 __dirname, __filename, process.cwd(), ./ 或者 ../,前三個都是絕對路徑,為了便于比較,./ 和 ../ 我們通過 path.resolve(‘./')來轉(zhuǎn)換為絕對路徑。
先看一個簡單的栗子:
假如我們有這樣的文件結(jié)構(gòu):
app/ -lib/ -common.js -model -task.js -test.js
在 task.js 里編寫如下的代碼:
var path = require('path'); console.log(__dirname); console.log(__filename); console.log(process.cwd()); console.log(path.resolve('./'));
在 model 目錄下運行 node task.js 得到的輸出是:
/Users/guo/Sites/learn/app/model.js /Users/guo/Sites/learn/app/model.js/task.js /Users/guo/Sites/learn/app/model.js /Users/guo/Sites/learn/app/model.js
然后在 app 目錄下運行 node model/task.js,得到的輸出是:
/Users/guo/Sites/learn/app/model.js /Users/guo/Sites/learn/app/model.js/task.js /Users/guo/Sites/learn/app /Users/guo/Sites/learn/app
那么,不好意思不是問題來了~T_T,我們可以得出一些膚淺的結(jié)論了:
__dirname: 總是返回被執(zhí)行的 js 所在文件夾的絕對路徑
__filename: 總是返回被執(zhí)行的 js 的絕對路徑
process.cwd(): 總是返回運行 node 命令時所在的文件夾的絕對路徑
./: 跟 process.cwd() 一樣、一樣、一樣的嗎?
我明明記得在 require(‘../lib/common') 里一直都是各種相對路徑寫,也沒見報什么錯啊,我們還在再來個栗子吧,還是上面的結(jié)構(gòu),'model/task.js' 里的代碼改成:
var fs = require('fs'); var common = require('../lib/common'); fs.readFile('../lib/common.js', function (err, data) { if (err) return console.log(err); console.log(data); });
在 model 目錄下運行 node task.js,一切 Ok,沒有報錯。然后在 app 目錄下運行 node model/task.js,然后很果斷滴報錯了:
那么這下問題真的都是來了,按照上面的理論,在 app 下運行時,../lib/common.js 會被轉(zhuǎn)成 /Users/guo/Sites/learn/lib/common.js,這個路徑顯然是不存在的,但是從運行結(jié)果可以看出 require(‘../lib/common') 是 OK 的,只是 readFile 時報錯了。
那么關(guān)于 ./ 正確的結(jié)論是:
在 require() 中使用是跟 __dirname 的效果相同,不會因為啟動腳本的目錄不一樣而改變,在其他情況下跟 process.cwd() 效果相同,是相對于啟動腳本所在目錄的路徑。
三、總結(jié):
只有在 require() 時才使用相對路徑(./, ../) 的寫法,其他地方一律使用絕對路徑,如下:
// 當(dāng)前目錄下 path.dirname(__filename) + ‘/test.js'; // 相鄰目錄下 path.resolve(__dirname, ‘../lib/common.js');
看完上述內(nèi)容,你們對NodeJs中有哪些文件路徑有進(jìn)一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司行業(yè)資訊頻道,感謝大家的支持。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站www.cdcxhl.com,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。