回顧Node檔案路徑

2021-09-24 06:39:38 字數 3881 閱讀 1277

node中路徑在很多地方都有使用,基礎到不起眼。但有時候就是不起眼的東西,會在你不輕易間跳出來給你上一課。

想起來複習一下檔案路徑的起因,是因為最近整理了一下專案結構,調整了目錄。這也是基於對現代ide的信任(都是ide給慣的病),ide會處理好路徑問題,所以我只管拖動,他負責善後。可是沒想到啊,我盡然忘了他不會處理path.join(__dirname, '/../logs/')這種方式的路徑。

於是在**執行了兩天後,發現怎麼project/logs的裡面的日誌停更了兩天,是拖更嗎?這不行啊,我得催催更。

這才發現logger中介軟體的目錄也變了,但是處理的路徑不對,logs也沒有拖更,只是另尋他處了。

log4js.configure(,

koa:

},});複製**

那肛肛好複習一下檔案路徑吧。

node中分為相對路徑絕對路徑兩種,相對路徑表示當前目錄層級相對於目標的位置,而絕對路徑表示目標當前所在的位置。

相對路徑:

絕對路徑

path路徑

// join

path.join('/foo', 'bar', 'baz/asdf', 'quux', '..');

// 返回: '/foo/bar/baz/asdf'

path.join('foo', {}, 'bar');

// 丟擲 'typeerror: path must be a string. received {}'

// resolve

path.resolve('/foo/bar', './baz');

// 返回: '/foo/bar/baz'

path.resolve('/foo/bar', '/tmp/file/');

// 返回: '/tmp/file'

path.resolve('wwwroot', 'static_files/png/', '../gif/image.gif');

// 如果當前工作目錄是 /home/myself/node,則返回 '/home/myself/node/wwwroot/static_files/gif/image.gif'。

複製**

logger.js的檔案裡寫下如下**:

// 所在:/users/simon/workspace/inspiration/fitnoteserver/src/util/logger.js

console.log(__dirname);

console.log(process.cwd());

console.log(__filename);

console.log('----------------------');

console.log(path.join(__dirname, '/'));

console.log(path.join(__dirname, '../logs/'));

console.log(path.join(__dirname, '../../logs'));

console.log('----------------------');

console.log(path.resolve(__dirname, '/'));

console.log(path.resolve(__dirname, '../logs/'));

console.log(path.resolve(__dirname, '../../logs'));

複製**

然後分別在不同目錄下啟動專案:

# workspace/inspiration/fitnoteserver

▶ node src/index.js

/users/simon/workspace/inspiration/fitnoteserver/src/util

/users/simon/workspace/inspiration/fitnoteserver

/users/simon/workspace/inspiration/fitnoteserver/src/util/logger.js

----------------------

/users/simon/workspace/inspiration/fitnoteserver/src/util/

/users/simon/workspace/inspiration/fitnoteserver/src/logs/

/users/simon/workspace/inspiration/fitnoteserver/logs

----------------------

//users/simon/workspace/inspiration/fitnoteserver/src/logs

/users/simon/workspace/inspiration/fitnoteserver/logs

# inspiration/fitnoteserver/src

▶ node index.js

/users/simon/workspace/inspiration/fitnoteserver/src/util

/users/simon/workspace/inspiration/fitnoteserver/src

/users/simon/workspace/inspiration/fitnoteserver/src/util/logger.js

----------------------

/users/simon/workspace/inspiration/fitnoteserver/src/util/

/users/simon/workspace/inspiration/fitnoteserver/src/logs/

/users/simon/workspace/inspiration/fitnoteserver/logs

----------------------

//users/simon/workspace/inspiration/fitnoteserver/src/logs

/users/simon/workspace/inspiration/fitnoteserver/logs

複製**

重點

上面兩個**片段可以清楚的看到node執行目錄不同對相對路徑的影響,相對路徑./process.cwd()相同,都是當前node命令執行時所在的資料夾的絕對路徑。

node中,使用require時可以忽略這點,你可以在require中使用相對路徑,但是在其他的地方都需要使用絕對路徑。因為require內部的路徑始終相對於你呼叫它的檔案,它與你的工作目錄無關。

在專案中要格外注意相對路徑與絕對路徑,除了require()其他地方路徑都要使用絕對路徑。

而絕對路徑要注意path.joinpath.resolve的區別,同時注意專案啟動時node執行的位置。

stackoverflowwhat is the difference between __dirname and ./ in node.js?

node.js 文件——路徑

blog

Node 檔案路徑問題 dirname與

在每個模組中,除了require exports等模組相關api之外,還有兩個特殊的成員 在檔案操作中,使用相對路徑是不可靠的,因為在node中檔案操作的路徑 被設計為相對於執行node命令所處的路徑 所以為了解決這個問題,我們需要使用 dirname或者 filename 在拼接路徑的過程中,為了...

Node14 檔案路徑

node.js中的檔案路徑主要有以下幾種 dirname filenameproces.cwd 其中前三個是絕對路徑,後兩個是相對路徑 可以通過path.resolve轉換為絕對路徑 我現在的目錄結構是這樣的 d projects path test path.jspath.js const pat...

node路徑模組path

console.log filename 兩個槓,當前正在執行的指令碼名稱 console.log dirname 當前正在執行指令碼的目錄名稱 let path require path let strpath e share node node demo6 index1.js console.l...