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

溫馨提示×

溫馨提示×

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

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

Node.js中的path模塊怎么用

發布時間:2021-08-24 10:34:23 來源:億速云 閱讀:204 作者:chen 欄目:web開發

這篇文章主要介紹“Node.js中的path模塊怎么用”,在日常操作中,相信很多人在Node.js中的path模塊怎么用問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Node.js中的path模塊怎么用”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

在 Node 中使用 Path 模塊

path 模塊中最常用的方法是 path.join()。該方法將一個或多個路徑段合并為一個字符串,如下所示:

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'

原因主要有兩個:

  • 對于 Windows 支持。Windows 使用反斜杠(\)而不是正斜杠(/)作為路徑分隔符。path.join() 會為我們處理此問題。因為 path.join('data', 'test.txt') 在 Linux 和 OSX 以及 Windows 上都會返回 'data/test.txt'

  • 用于處理邊緣情況。使用文件系統路徑時,會彈出許多邊緣情況。例如,如果您嘗試手動連接兩個路徑,您可能會意外地得到重復的路徑分隔符。path.join() 方法為我們處理開頭和結尾的斜杠,如下所示:

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 方法

path 模塊還具有幾個用于提取路徑組件的方法,例如文件擴展名或目錄。

path.extname() 方法以字符串形式返回文件擴展名:

path.extname('/path/to/test.txt') // '.test'

就像連接兩條路徑一樣,獲取文件擴展名比最初看起來要復雜。

如果 path 以 . 為結尾,將返回 .。如果文件無擴展名,又不以 . 結尾,或文件沒有擴展名,將返回空值。

path.extname('/path/to/index.') // '.'

path.extname('/path/to/README') // ''

path.extname('/path/to/.gitignore') // ''

path 模塊還有 path.basename()path.dirname() 方法,分別獲取文件名(包括擴展名)和目錄。

path.basename('/path/to/test.txt') // 'test.txt'

path.dirname('/path/to/test.txt') // '/path/to'

path.parse() 方法返回一個對象,該對象包含分為五個不同組件的路徑,包括擴展名和目錄。path.parse() 方法也是不帶任何擴展名獲取文件名的方法。

path.parse('/path/to/test.txt')

/*
{
  root: '/',
  dir: '/path/to',
  base: 'test.txt',
  ext: '.txt',
  name: 'test'
}
*/

使用 path.relative()

path.join()path.extname() 這樣的方法涵蓋了大多數使用文件路徑的用例。但是 path 模塊有幾個更高級的方法,例如 path.relative()

path.relative(from, to) 方法根據當前工作目錄返回從 fromto 的相對路徑。 如果 fromto 都解析為相同的路徑(在分別調用 path.resolve() 之后),則返回零長度字符串。

// 返回相對于第一條路徑的第二條路徑的路徑
path.relative('/app/views/home.html', '/app/layout/index.html') // '../../layout/index.html'

如果給定了相對于一個目錄的路徑,但需要相對于另一個目錄的路徑,則 path.relative() 方法非常有用。例如,流行的文件系統監視庫 Chokidar 提供了相對于監視目錄的路徑。

const watcher = chokidar.watch('mydir')

// 如果用戶添加 mydir/path/to/test.txt,則會打印 mydir/path/to/test.txt
watcher.on('add', path => console.log(path))

這就是為什么大量的使用 Chokidar 工具。如常見的 Gatsby 或 webpack,其在內部也大量使用 path.relative() 方法。

例如,Gatsby 使用 path.relative() 方法幫助同步靜態文件目錄。

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}`)
    })
}

現在,假設用戶向 static 目錄添加了一個新文件 main.js。Chokidar 調用 on('add') 事件處理程序,路徑設置為 static/main.js。但是,當您將文件復制到 /public 時,不需要額外的 static/

調用 path.relative('static', 'static/main.js') 返回 static/main.js 相對于 static 的路徑,這正是您想要將 static 的內容復制到 public 的路徑。

跨操作系統路徑和 URL

默認情況下,path 模塊會根據 Node 進程運行的操作系統自動在 POSIX(OSX、Linux)和 Windows 模式之間切換。

但是,path 模塊確實可以在 POSIX 上使用 Windows path 模塊,反之亦然。path.posixpath.win32 屬性分別包含 path 模塊的 Posix 和 Windows 版本。

// 返回 'path\to\test.txt',與操作系統無關
path.win32.join('path', 'to', 'test.txt')

// 返回 'path/to/test.txt',與操作系統無關
path.posix.join('path', 'to', 'test.txt')

在大多數情況下,根據檢測到的操作系統自動切換 path 模塊是正確的行為。但是,使用 path.posixpath.win32 屬性對于總是希望輸出 Windows 或 Linux 樣式路徑的測試或應用程序可能會有所幫助。

例如,一些應用程序使用 path.join()path.extname() 等方法處理 URL 路徑。

// 'https://api.mydomain.app/api/v2/me'
'https://api.mydomain.app/' + path.join('api', 'v2', 'me')

這種方法適用于 Linux 和 OSX,但如果有人試圖將您的應用程序部署到一些無服務器上會發生什么?

你最終會得到 https://api.mydomain.app/api\v2\me,這不是有效的 URL!如果使用 path 模塊操作 URL,則應使用 path.posix

到此,關于“Node.js中的path模塊怎么用”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

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

AI

隆林| 巴青县| 张家界市| 乡宁县| 敦煌市| 册亨县| 盱眙县| 娄烦县| 贵南县| 上杭县| 锦屏县| 元江| 通河县| 丰城市| 武鸣县| 天门市| 阿克苏市| 托克托县| 武城县| 樟树市| 双鸭山市| 呼和浩特市| 修文县| 内江市| 松滋市| 肇庆市| 巴彦县| 高陵县| 剑河县| 秦皇岛市| 曲沃县| 全州县| 海淀区| 德昌县| 沛县| 永胜县| 巴林左旗| 东兰县| 富川| 南汇区| 霞浦县|