中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

NodeJs中有哪些文件路徑

發布時間:2021-07-21 10:32:35 來源:億速云 閱讀:118 作者:Leah 欄目:web開發

今天就跟大家聊聊有關NodeJs中有哪些文件路徑,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

一、挖坑 & 掉坑:

緣起一段這樣的代碼:

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() 效果相同,是相對于啟動腳本所在目錄的路徑。

三、總結:

只有在 require() 時才使用相對路徑(./, ../) 的寫法,其他地方一律使用絕對路徑,如下:

// 當前目錄下 
path.dirname(__filename) + ‘/test.js'; 
// 相鄰目錄下 
path.resolve(__dirname, ‘../lib/common.js');

看完上述內容,你們對NodeJs中有哪些文件路徑有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

方城县| 晋江市| 枣强县| 青海省| 淮阳县| 安徽省| 曲沃县| 敦化市| 乐清市| 青川县| 睢宁县| 天津市| 桐乡市| 万年县| 敦化市| 太仓市| 靖西县| 卢龙县| 嘉善县| 乃东县| 义乌市| 奇台县| 宿迁市| 宜春市| 吉木萨尔县| 家居| 莱芜市| 京山县| 色达县| 陇南市| 涞源县| 额济纳旗| 巴彦淖尔市| 庄河市| 桓台县| 石渠县| 文山县| 德保县| 呼和浩特市| 东至县| 白沙|