Nodejs文件路徑處理API:path


path簡介

path是一個和路徑有關的模塊,用於處理文件路徑和目錄路徑,可以通過如下方式引入使用:

const path = require('path')

nodejs官方文檔:https://nodejs.org/dist/latest-v12.x/docs/api/path.html
nodejs中文文檔:http://nodejs.cn/api/path.html

下面將重點介紹一些path常用的方法:

normalize join resolve
basename extname dirname
parse format
sep delimiter win32 posix

path 模塊的默認操作因 Node.js 應用程序運行所在的操作系統而異。 在Windows和POSIX上運行會得到不同風格的輸出結果。


  • normalize

識別出我們所寫的路徑不規范的地方,然后將該路徑標准規范化:

const { normalize } = require('path')

console.log(normalize('C:\\Windows\\debug'))
//打印:C:\Windows\debug
console.log(normalize('/usr//local/bin'))
//打印:\usr\local\bin
console.log(normalize('/usr//local/./bin'))
//打印:\usr\local\bin
console.log(normalize('/usr//local/../bin'))
//打印:\usr\bin

normalize會將我們傳入的 "\\" 和 "//"替換為規范的 “/”,還會解析 ".."和 "." 片段:"."表示當前工作目錄,".." 表示上一級目錄。
因為我使用的操作系統是Windows,Windows 識別多種路徑分隔符,因此這些分隔符都將被替換為 Windows 首選的分隔符 "/" ,在其他支持POSIX的OS(如UNIX、Linux(基本兼容,但並未參加正式認證))則依然打印 “\” 。

  • join

拼接一個路徑,同時會調用normalize來去對一些不規范的路徑進行處理:

const { join } = require('path')

console.log(join('/usr', 'local', 'bin/'))
//打印:\usr\local\bin\
console.log(join('/usr/', '/local/', '/bin/'))
//打印:\usr\local\bin\
console.log(join('/usr', '../local', 'bin/'))
//打印:\local\bin\

如果拼接的是零長度的字符串,則返回 '.',表示當前工作目錄。

  • resolve

將相對路徑解析為絕對路徑:

const { resolve } = require('path')

console.log(resolve('./'))
//打印:當前項目所在目錄的絕對路徑
  • basename, dirname, extname

basename:返回 path 的最后一部分的文件名
dirname:返回 path 的目錄名
extname:返回 path 的擴展名

const { basename, dirname, extname } = require('path')

const filePath = '/usr/local/bin/app.js'

console.log(basename(filePath))
//打印:app.js
console.log(dirname(filePath))
//打印:/usr/local/bin
console.log(extname(filePath))
//打印:.js
  • parse, format

parse:打印一個對象,其屬性表示 path 的重要元素

const { parse } = require('path')

const posixPath = '/home/user/dir/file.txt' //POSIX風格
const windowsPath = 'C:\\path\\dir\\file.txt' //windows風格

console.log(parse(posixPath))
// 打印:
// { root: '/',
//   dir: '/home/user/dir',
//   base: 'file.txt',
//   ext: '.txt',
//   name: 'file' }
console.log(parse(windowsPath))
// 打印:
// {
//   root: 'C:\\',
//   dir: 'C:\\path\\dir',
//   base: 'file.txt',
//   ext: '.txt',
//   name: 'file'
// }

format:從對象打印路徑字符串, 與 path.parse() 相反。

const { format } = require('path')

const filePath = { 
  root: '/',
  dir: '/home/user/dir',
  base: 'file.txt',
  ext: '.txt',
  name: 'file' 
}

console.log(format(filePath))
// 打印:/home/user/dir/file.txt

此外,當為 pathObject 提供屬性時,以下組合中有些屬性優先級會更高會更高:
1.如果提供了 pathObject.dir,則忽略 pathObject.root
2.如果 pathObject.base 存在,則忽略 pathObject.ext 和 pathObject.name。

const { format } = require('path')

// 如果提供了 `dir`、 `root` 和 `base`,
// 則返回 `${dir}${path.sep}${base}`。
// `root` 會被忽略。
const filePath = {
  root: '/ignored',
  dir: '/home/user/dir',
  base: 'file.txt'
}

console.log(format(filePath))
// 打印: '/home/user/dir/file.txt'

// 如果未指定 `dir`,則使用 `root`。 
// 如果只提供 `root`,或 'dir` 等於 `root`,則將不包括平台分隔符。 
// `ext` 將被忽略。
const filePath2 = {
  root: '/',
  base: 'file.txt',
  ext: 'ignored'
}

console.log(format(filePath2))
// 打印: '/file.txt'

// 如果未指定 `base`,則使用 `name` + `ext`。
const filePath3 = {
  root: '/',
  name: 'file',
  ext: '.txt'
}

console.log(format(filePath3))
// 打印: '/file.txt'
  • sep, delimiter, win32, posix

sep:提供平台特定的路徑片段分隔符

const { sep } = require('path')

console.log(sep)
// Windows打印:\
// POSIX打印:/

delimiter:提供平台特定的路徑定界符

const { delimiter } = require('path')

console.log(process.env.PATH)
// Windows打印:'C:\Windows\system32;C:\Windows;C:\Program Files\node\'
// POSIX打印:'/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin'
console.log(delimiter)
// Windows打印:;
// POSIX打印::

win32:提供對特定於 Windows 的 path 方法的實現的訪問

const {
  sep,
  delimiter,
  win32	//在POSIX中引入該屬性,就可以查看Windows下的輸出風格
} = require('path')

console.log(win32.sep)
//打印:\
console.log(win32.delimiter);
//打印:;

posix:提供對 path 方法的 POSIX 特定實現的訪問。

const {
  sep,
  delimiter,
  posix	//在Windows中引入該屬性,就可以查看POSIX下的輸出風格
} = require('path')

console.log(posix.sep)
//打印:/
console.log(posix.delimiter);
//打印::

補充:

  • __dirname,__filename總是返回文件的絕對路徑;
  • process.cwd() 則是返回執行 node 命令所在的文件夾的路徑;
  • './' 在require方法中總是相對當前文件所在的文件夾,在其他地方和process.cwd() 一樣,相對node啟動文件夾。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM