您好,登錄后才能下訂單哦!
這篇文章主要介紹“Node.js中的path模塊怎么用”,在日常操作中,相信很多人在Node.js中的path模塊怎么用問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Node.js中的path模塊怎么用”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
path 模塊中最常用的方法是 path.join()
。該方法將一個(gè)或多個(gè)路徑段合并為一個(gè)字符串,如下所示:
const path = require('path') path.join('/path', 'to', 'test.txt') // '/path/to/test.txt'
您可能想知道為什么要使用 path.join()
方法而不是字符串拼接。
'/path' + '/' + 'to' + '/' + 'test.txt' // '/path/to/test.txt' ['/path', 'to', 'test.txt'].join('/') // '/path/to/test.txt'
原因主要有兩個(gè):
對于 Windows 支持。Windows 使用反斜杠(\
)而不是正斜杠(/
)作為路徑分隔符。path.join()
會(huì)為我們處理此問題。因?yàn)?path.join('data', 'test.txt')
在 Linux 和 OSX 以及 Windows 上都會(huì)返回 'data/test.txt'
。
用于處理邊緣情況。使用文件系統(tǒng)路徑時(shí),會(huì)彈出許多邊緣情況。例如,如果您嘗試手動(dòng)連接兩個(gè)路徑,您可能會(huì)意外地得到重復(fù)的路徑分隔符。path.join()
方法為我們處理開頭和結(jié)尾的斜杠,如下所示:
path.join('data', 'test.txt') // 'data/test.txt' path.join('data', '/test.txt') // 'data/test.txt' path.join('data/', 'test.txt') // 'data/test.txt' path.join('data/', '/test.txt') // 'data/test.txt'
path 模塊還具有幾個(gè)用于提取路徑組件的方法,例如文件擴(kuò)展名或目錄。
path.extname()
方法以字符串形式返回文件擴(kuò)展名:
path.extname('/path/to/test.txt') // '.test'
就像連接兩條路徑一樣,獲取文件擴(kuò)展名比最初看起來要復(fù)雜。
如果 path 以 .
為結(jié)尾,將返回 .
。如果文件無擴(kuò)展名,又不以 .
結(jié)尾,或文件沒有擴(kuò)展名,將返回空值。
path.extname('/path/to/index.') // '.' path.extname('/path/to/README') // '' path.extname('/path/to/.gitignore') // ''
path 模塊還有 path.basename()
和 path.dirname()
方法,分別獲取文件名(包括擴(kuò)展名)和目錄。
path.basename('/path/to/test.txt') // 'test.txt' path.dirname('/path/to/test.txt') // '/path/to'
path.parse()
方法返回一個(gè)對象,該對象包含分為五個(gè)不同組件的路徑,包括擴(kuò)展名和目錄。path.parse()
方法也是不帶任何擴(kuò)展名獲取文件名的方法。
path.parse('/path/to/test.txt') /* { root: '/', dir: '/path/to', base: 'test.txt', ext: '.txt', name: 'test' } */
path.relative()
像 path.join()
和 path.extname()
這樣的方法涵蓋了大多數(shù)使用文件路徑的用例。但是 path 模塊有幾個(gè)更高級的方法,例如 path.relative()
。
path.relative(from, to)
方法根據(jù)當(dāng)前工作目錄返回從 from
到 to
的相對路徑。 如果 from
和 to
都解析為相同的路徑(在分別調(diào)用 path.resolve()
之后),則返回零長度字符串。
// 返回相對于第一條路徑的第二條路徑的路徑 path.relative('/app/views/home.html', '/app/layout/index.html') // '../../layout/index.html'
如果給定了相對于一個(gè)目錄的路徑,但需要相對于另一個(gè)目錄的路徑,則 path.relative()
方法非常有用。例如,流行的文件系統(tǒng)監(jiān)視庫 Chokidar 提供了相對于監(jiān)視目錄的路徑。
const watcher = chokidar.watch('mydir') // 如果用戶添加 mydir/path/to/test.txt,則會(huì)打印 mydir/path/to/test.txt watcher.on('add', path => console.log(path))
這就是為什么大量的使用 Chokidar 工具。如常見的 Gatsby 或 webpack,其在內(nèi)部也大量使用 path.relative()
方法。
例如,Gatsby 使用 path.relative()
方法幫助同步靜態(tài)文件目錄。
export const syncStaticDir = (): void => { const staticDir = nodePath.join(process.cwd(), `static`) chokidar .watch(staticDir) .on(`add`, path => { const relativePath = nodePath.relative(staticDir, path) fs.copy(path, `${process.cwd()}/public/${relativePath}`) }) .on(`change`, path => { const relativePath = nodePath.relative(staticDir, path) fs.copy(path, `${process.cwd()}/public/${relativePath}`) }) }
現(xiàn)在,假設(shè)用戶向 static
目錄添加了一個(gè)新文件 main.js
。Chokidar 調(diào)用 on('add')
事件處理程序,路徑設(shè)置為 static/main.js
。但是,當(dāng)您將文件復(fù)制到 /public
時(shí),不需要額外的 static/
。
調(diào)用 path.relative('static', 'static/main.js')
返回 static/main.js
相對于 static
的路徑,這正是您想要將 static
的內(nèi)容復(fù)制到 public
的路徑。
默認(rèn)情況下,path 模塊會(huì)根據(jù) Node 進(jìn)程運(yùn)行的操作系統(tǒng)自動(dòng)在 POSIX(OSX、Linux)和 Windows 模式之間切換。
但是,path 模塊確實(shí)可以在 POSIX 上使用 Windows path 模塊,反之亦然。path.posix
和 path.win32
屬性分別包含 path 模塊的 Posix 和 Windows 版本。
// 返回 'path\to\test.txt',與操作系統(tǒng)無關(guān) path.win32.join('path', 'to', 'test.txt') // 返回 'path/to/test.txt',與操作系統(tǒng)無關(guān) path.posix.join('path', 'to', 'test.txt')
在大多數(shù)情況下,根據(jù)檢測到的操作系統(tǒng)自動(dòng)切換 path 模塊是正確的行為。但是,使用 path.posix
和 path.win32
屬性對于總是希望輸出 Windows 或 Linux 樣式路徑的測試或應(yīng)用程序可能會(huì)有所幫助。
例如,一些應(yīng)用程序使用 path.join()
和 path.extname()
等方法處理 URL 路徑。
// 'https://api.mydomain.app/api/v2/me' 'https://api.mydomain.app/' + path.join('api', 'v2', 'me')
這種方法適用于 Linux 和 OSX,但如果有人試圖將您的應(yīng)用程序部署到一些無服務(wù)器上會(huì)發(fā)生什么?
你最終會(huì)得到 https://api.mydomain.app/api\v2\me
,這不是有效的 URL!如果使用 path 模塊操作 URL,則應(yīng)使用 path.posix
。
到此,關(guān)于“Node.js中的path模塊怎么用”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。