Node.js的路徑模組提供了一些有用的功能來處理檔案路徑。
path
模組提供了許多非常有用的功能來存取和操作檔案系統。
不需要單獨安裝它。由於它是Node的核心部分,只需透過require
進行引用即可:
const path = require('path')
此模組提供了path.sep
來提供路徑分隔符號(在Windows上為\
,在Linux和macOS上為/
),以及path.delimiter
提供路徑分隔符(在Windows上為;
,在Linux和macOS上為:
)。
以下是path
的方法:
path.basename()
path.dirname()
path.extname()
path.isAbsolute()
path.join()
path.normalize()
path.parse()
path.relative()
path.resolve()
path.basename()
返回路徑的最後一部分。第二個參數可以過濾掉檔案的副檔名:
require('path').basename('/test/something') //something
require('path').basename('/test/something.txt') //something.txt
require('path').basename('/test/something.txt', '.txt') //something
path.dirname()
返回路徑的目錄部分:
require('path').dirname('/test/something') // /test
require('path').dirname('/test/something/file.txt') // /test/something
path.extname()
返回路徑的副檔名部分:
require('path').extname('/test/something') // ''
require('path').extname('/test/something/file.txt') // '.txt'
path.isAbsolute()
如果是絕對路徑則返回true
:
require('path').isAbsolute('/test/something') // true
require('path').isAbsolute('./test/something') // false
path.join()
將兩個或多個路徑部分組合起來:
const name = 'flavio'
require('path').join('/', 'users', name, 'notes.txt') //'/users/flavio/notes.txt'
path.normalize()
當路徑包含相對位置符(.
或..
)或連續的斜線時,嘗試計算實際的路徑:
require('path').normalize('/users/flavio/..//test.txt') ///users/test.txt
path.parse()
將一個路徑解析為一個包含其組成部分的物件:
root
:根路徑dir
:從根路徑開始的目錄路徑base
:檔案名稱+副檔名name
:檔案名稱ext
:檔案的副檔名
範例:
require('path').parse('/users/test.txt')
結果:
{
root: '/',
dir: '/users',
base: 'test.txt',
ext: '.txt',
name: 'test'
}
path.relative()
接受兩個路徑作為參數,返回從第一個路徑到第二個路徑的相對路徑,基於當前工作目錄。
範例:
require('path').relative('/Users/flavio', '/Users/flavio/test.txt') //'test.txt'
require('path').relative('/Users/flavio', '/Users/flavio/something/test.txt') //'something/test.txt'
path.resolve()
可以使用path.resolve()
來計算相對路徑的絕對路徑:
path.resolve('flavio.txt') //'/Users/flavio/flavio.txt'(如果從我的家目錄運行)
通過指定第二個參數,resolve
將使用第一個參數作為第二個參數的基礎:
path.resolve('tmp', 'flavio.txt')//'/Users/flavio/tmp/flavio.txt'(如果從我的家目錄運行)
如果第一個參數以斜線開頭,表示它是絕對路徑:
path.resolve('/etc', 'flavio.txt')//'/etc/flavio.txt'