国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

淺析 NodeJs 的幾種文件路徑

2024-05-06 15:16:16
字體:
來源:轉載
供稿:網友

一、挖坑 & 掉坑:

緣起一段這樣的代碼:

fs.readFile('./docs/use.md', function (err, buffer) {  if (err) {   return console.log('error: ', err);  }  console.log('OK'); });

本地運行時一切 OK,線上部署時卻死活找不到 ./docs/use.md 這個文件,后來才發現是因為線上啟動應用時不是從當前目錄啟動了,不過為什么啟動腳本的位置也會影響這個路徑呢,且往下看。

二、填坑:

Node 中的文件路徑大概有 __dirname, __filename, process.cwd(), ./ 或者 ../,前三個都是絕對路徑,為了便于比較,./ 和 ../ 我們通過 path.resolve(‘./')來轉換為絕對路徑。

先看一個簡單的栗子:

假如我們有這樣的文件結構:

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,我們可以得出一些膚淺的結論了:

__dirname: 總是返回被執行的 js 所在文件夾的絕對路徑

__filename: 總是返回被執行的 js 的絕對路徑

process.cwd(): 總是返回運行 node 命令時所在的文件夾的絕對路徑

./: 跟 process.cwd() 一樣、一樣、一樣的嗎?

我明明記得在 require(‘../lib/common') 里一直都是各種相對路徑寫,也沒見報什么錯啊,我們還在再來個栗子吧,還是上面的結構,'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 會被轉成 /Users/guo/Sites/learn/lib/common.js,這個路徑顯然是不存在的,但是從運行結果可以看出 require(‘../lib/common') 是 OK 的,只是 readFile 時報錯了。

那么關于 ./ 正確的結論是:

在 require() 中使用是跟 __dirname 的效果相同,不會因為啟動腳本的目錄不一樣而改變,在其他情況下跟 process.cwd() 效果相同,是相對于啟動腳本所在目錄的路徑。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 吴忠市| 易门县| 中方县| 武功县| 长汀县| 清水河县| 天门市| 泽库县| 武隆县| 黄骅市| 莲花县| 灵寿县| 临桂县| 涡阳县| 泽普县| 拉孜县| 曲沃县| 江山市| 专栏| 象州县| 卢龙县| 隆化县| 义马市| 龙江县| 绥中县| 达日县| 龙江县| 双柏县| 乐都县| 马龙县| 墨竹工卡县| 桂东县| 凤山县| 南昌市| 怀来县| 龙门县| 略阳县| 阿合奇县| 青阳县| 陆河县| 永顺县|