本模塊包含一套用于處理和轉換文件路徑的工具集。幾乎所有的方法只做字符串變換, 不會調用文件系統檢查路徑是否有效。
通過 require('path')
來加載此模塊。以下是本模塊所提供的方法:
path.normalize(p)
規范化字符串路徑,注意 '..'
和 '.' 部分
多個斜杠會被替換成一個; 路徑末尾的斜杠會被保留; Windows 系統上, 會使用反斜杠。
path.join([path1], [path2], [...])
連接所有參數, 并且規范化得到的路徑.
參數必須是字符串。在 v0.8 版本非字符串參數會被悄悄忽略。 在 v0.10 及以后版本將會拋出一個異常。
path.join('foo', {}, 'bar') // 拋出異常 TypeError: Arguments to path.join must be strings
path.resolve([from ...], to)
把to
解析為一個絕對路徑。
如果to
不是一個相對于from
參數的絕對路徑,to
會被添加到from
的右邊,直到找出一個絕對路徑為止。如果使用from
路徑且仍沒有找到絕對路徑時,使用當時路徑作為目錄。返回的結果已經規范化,得到的路徑會去掉結尾的斜杠,除非得到的當前路徑為root目錄。非字符串參數將被忽略。
另一種思路, 是把它看做一系列 cd
命令.
path.resolve('foo/bar', '/tmp/file/', '..', 'a/../subfile')
相當于:
cd foo/bar cd /tmp/file/ cd .. cd a/../subfile pwd
不同的是,不同的路徑不需要存在的,也可能是文件。
path.resolve('wwwroot', 'static_files/png/', '../gif/image.gif') // 如果當前工作目錄為 /home/myself/node,它返回: '/home/myself/node/wwwroot/static_files/gif/image.gif'
path.isAbsolute(path)
判定path
是否為絕對路徑。一個絕對路徑總是指向一個相同的位置,無論當前工作目錄是在哪里。
path.relative(from, to)
Solve從from
到to
的相對路徑。
有時我們有2個絕對路徑, 我們需要從中找出相對目錄的起源目錄。這完全是path.resolve
的相反實現,我們可以看看是什么意思:
path.resolve(from, path.relative(from, to)) == path.resolve(to)
?
示例
path.relative('/data/orandea/test/aaa', '/data/orandea/impl/bbb') // 返回 '../../impl/bbb'
path.dirname(p)
返回路徑中文件夾的名稱. 類似于Unix的dirname
命令.
path.dirname('/foo/bar/baz/asdf/quux') // returns '/foo/bar/baz/asdf'
path.basename(p, [ext])
返回路徑中的最后哦一部分. 類似于Unix 的 basename
命令.
path.basename('/foo/bar/baz/asdf/quux.html', '.html') // returns 'quux'
path.extname(p)
返回路徑中文件的擴展名, 在從最后一部分中的最后一個'.'到字符串的末尾。 如果在路徑的最后一部分沒有'.',或者第一個字符是'.',就返回一個 空字符串。
path.sep
特定平臺的文件分隔工具. '\\'
或者 '/'
.
*nix 上的例子:
'foo/bar/baz'.split(path.sep) // returns ['foo', 'bar', 'baz']
Windows 上的例子:
'foo\\bar\\baz'.split(path.sep) // returns ['foo', 'bar', 'baz']
path.delimiter
特定平臺的路徑分隔符, ;
或者 ':'
.
*nix 上的例子:
process.env.PATH.split(path.delimiter) // returns ['/usr/bin', '/bin', '/usr/sbin', '/sbin', '/usr/local/bin']
Windows 上的例子:
console.log(process.env.PATH) // 'C:\Windows\system32;C:\Windows;C:\Program Files\nodejs\'
process.env.PATH.split(path.delimiter) // returns ['C:\Windows\system32', 'C:\Windows', 'C:\Program Files\nodejs\']