天天看點

nodejs 目前檔案路徑_Nodejs檔案路徑處理API:path

path簡介

path是一個和路徑有關的子產品,用于處理檔案路徑和目錄路徑,可以通過如下方式引入使用:

const path = require('path')

下面将重點介紹一些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啟動檔案夾。