久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長(zhǎng)資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      淺談Node.js中的path模塊和常用方法

      本篇文章帶大家了解一下Node.js中的 Path 模塊,介紹一下 Path 模塊的用法,以及常用的 Path 方法。

      淺談Node.js中的path模塊和常用方法

      Node.js path 模塊是一個(gè)內(nèi)置模塊,可幫助您以獨(dú)立于操作系統(tǒng)的方式使用文件系統(tǒng)路徑。如果要構(gòu)建支持 OSX、Linux 和 Windows 的 CLI 工具,則 Path 模塊是必不可少的。【推薦學(xué)習(xí):《nodejs 教程》】

      即使您正在構(gòu)建一個(gè)只在 Linux 上運(yùn)行的后端服務(wù),path 模塊仍然有助于在操作路徑時(shí)避免邊緣情況。

      下面我們將描述一些使用 path 模塊的常見(jiàn)模式,以及為什么您應(yīng)該使用 path 模塊而不是將路徑操縱成字符串。

      在 Node 中使用 Path 模塊

      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è):

      • 對(duì)于 Windows 支持。Windows 使用反斜杠()而不是正斜杠(/)作為路徑分隔符。path.join() 會(huì)為我們處理此問(wèn)題。因?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() 方法為我們處理開(kāi)頭和結(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 方法

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

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

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

      就像連接兩條路徑一樣,獲取文件擴(kuò)展名比最初看起來(lái)要復(fù)雜。

      如果 path 以 . 為結(jié)尾,將返回 .。如果文件無(wú)擴(kuò)展名,又不以 . 結(jié)尾,或文件沒(méi)有擴(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è)對(duì)象,該對(duì)象包含分為五個(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è)更高級(jí)的方法,例如 path.relative()

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

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

      如果給定了相對(duì)于一個(gè)目錄的路徑,但需要相對(duì)于另一個(gè)目錄的路徑,則 path.relative() 方法非常有用。例如,流行的文件系統(tǒng)監(jiān)視庫(kù) Chokidar 提供了相對(duì)于監(jiān)視目錄的路徑。

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

      這就是為什么大量的使用 Chokidar 工具。如常見(jiàn)的 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è)用戶(hù)向 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 相對(duì)于 static 的路徑,這正是您想要將 static 的內(nèi)容復(fù)制到 public 的路徑。

      跨操作系統(tǒng)路徑和 URL

      默認(rèn)情況下,path 模塊會(huì)根據(jù) Node 進(jìn)程運(yùn)行的操作系統(tǒng)自動(dòng)在 POSIX(OSX、Linux)和 Windows 模式之間切換。

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

      // 返回 'pathtotest.txt',與操作系統(tǒng)無(wú)關(guān) path.win32.join('path', 'to', 'test.txt')  // 返回 'path/to/test.txt',與操作系統(tǒng)無(wú)關(guān) path.posix.join('path', 'to', 'test.txt')

      在大多數(shù)情況下,根據(jù)檢測(cè)到的操作系統(tǒng)自動(dòng)切換 path 模塊是正確的行為。但是,使用 path.posixpath.win32 屬性對(duì)于總是希望輸出 Windows 或 Linux 樣式路徑的測(cè)試或應(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ú)服務(wù)器上會(huì)發(fā)生什么?

      你最終會(huì)得到 https://api.mydomain.app/apiv2me,這不是有效的 URL!如果使用 path 模塊操作 URL,則應(yīng)使用 path.posix。

      原文地址:https://juejin.cn/post/6997799224213504037

      作者:lio_zero

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)