這個模塊包含傳遞和轉換文件路徑的公共程序。幾乎全部的方法只會在字符串轉化的時候執行。 文件系統不會嘗試去確認路徑是否合法。html
經過 require('path')來使用這個模塊。
如下是該模塊提供的方法:node
返回路徑的最後一部分。就像Unix中的basename命令那樣。
windows
例子:api
path.basename('/foo/bar/baz/asdf/quux.html') // returns 'quux.html' path.basename('/foo/bar/baz/asdf/quux.html', '.html') // returns 'quux'
平臺特定的路徑分隔符, ';'或者
':' 。函數
在UNIX或者LINUX系統下的一個例子:ui
console.log(process.env.PATH) // '/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin' process.env.PATH.split(path.delimiter) // returns ['/usr/bin', '/bin', '/usr/sbin', '/sbin', '/usr/local/bin']
在windows系統下的一個例子:spa
console.log(process.env.PATH) // 'C:\Windows\system32;C:\Windows;C:\Program Files\node\' process.env.PATH.split(path.delimiter) // returns ['C:\\Windows\\system32', 'C:\\Windows', 'C:\\Program Files\\node\\']
譯者多嘴一句:不要把精力過多的放在細節上,若是你不太明白某個屬性或方法是怎麼回事,don't worry,一切都會隨着時間而變得好起來。翻譯
返回一個路徑所對應的文件夾名。就像你在Unix下使用dirname命令那樣。
code
例子:orm
path.dirname('/foo/bar/baz/asdf/quux') // returns '/foo/bar/baz/asdf'
返回路徑的擴展名,從最後一個'.'字符到路徑最後一個部分的字符串的結尾。若是在路徑的最後一部分中沒有'.'字符或者以'.'字符開頭,那麼則會返回一個空字符串。
例子:
path.extname('index.html') // returns '.html' path.extname('index.coffee.md') // returns '.md' path.extname('index.') // returns '.' path.extname('index') // returns '' path.extname('.index') // returns ''
從一個對象中返回一個路徑字符串, 與之相對應的方法請參考path.parse。
例子:
path.format({ root : "/", dir : "/home/user/dir", base : "file.txt", ext : ".txt", name : "file" }) // returns '/home/user/dir/file.txt'
確認傳進來的path參數是不是一個絕對路徑。一個絕對路徑
將老是解析到相同的位置,並沒有視工做文件夾。
Posix下的例子:
path.isAbsolute('/foo/bar') // true path.isAbsolute('/baz/..') // true path.isAbsolute('qux/') // false path.isAbsolute('.') // false
Windows下的例子:
path.isAbsolute('//server') // true path.isAbsolute('C:/foo/..') // true path.isAbsolute('bar\\baz') // false path.isAbsolute('.') // false
注意: 若是被看成參數傳遞的路徑字符串是一個長度爲0的字符串,與path模塊下其餘的方法不一樣,他會按照原樣使用並返回false。
把全部的參數結合在一塊兒並標準化。
參數必須是字符串。在v0.8下,不是字符串的參數會被忽略.在v0.10或更高版本,會拋出一個異常。
例子:
path.join('/foo', 'bar', 'baz/asdf', 'quux', '..') // returns '/foo/bar/baz/asdf' path.join('foo', {}, 'bar') // throws exception TypeError: Arguments to path.join must be strings
Note: join方法的參數中若是有長度爲0的字符串,與path模塊下其餘的函數不一樣,這些參數將會被忽略。若是沒有給join方法傳遞任何參數那麼會返回'.', 表明目前的工做目錄。
標準化一個路徑字符串, 特別是'..'和
'.'的部分。
當發現多個斜槓時,他們將會替換成一個單斜槓; 當一個路徑結尾有一個斜槓,它將會被保留。在windows下會使用反斜線。
例子:
path.normalize('/foo/bar//baz/asdf/quux/..') // returns '/foo/bar/baz/asdf'
注意: 若是將一個空字符串看成參數傳遞那麼會返回一個'.',表明當前的工做目錄。
將一個路徑字符串看成對象返回。
在UNIX或LINUX下的例子:
path.parse('/home/user/dir/file.txt') // returns { root : "/", dir : "/home/user/dir", base : "file.txt", ext : ".txt", name : "file" }
在windows下的例子:
path.parse('C:\\path\\dir\\index.html') // returns { root : "C:\\", dir : "C:\\path\\dir", base : "index.html", ext : ".html", name : "index" }
提供一個訪問path前綴的方法可是通常會因爲posix兼容方式二相互影響。(譯者水平有限,這句翻譯不許)
有時候咱們有兩個絕對路徑, 咱們須要從一個路徑向另一個路徑派生他們之間有關係的路徑。 這個方法其實是path.resolve的相反方法,好比:
path.resolve(from, path.relative(from, to)) == path.resolve(to)
例子:
path.relative('C:\\orandea\\test\\aaa', 'C:\\orandea\\impl\\bbb') // returns '..\\..\\impl\\bbb' path.relative('/data/orandea/test/aaa', '/data/orandea/impl/bbb') // returns '../../impl/bbb'
提示:若是relative方法的的參數是空字符串那麼當前的工做目錄會去替代那個空字符串。若是提供了兩個相同的參數,那麼該方法會返回一個空字符串。
將 to
分解成一個絕對路徑。
若是 to
不是一個絕對路徑那麼from將會被優先考慮,
直到找到一個絕對路徑。若是用完了全部的from
依然沒有找到絕對路徑,就會使用當前的工做目錄。結果路徑會被標準化, 尾部斜槓會被移除除非路徑分解到根目錄。from若是有空字符串將會被忽略。
若是不太理解,能夠試着將其當作cmd中的一系列cd命令。
path.resolve('foo/bar', '/tmp/file/', '..', 'a/../subfile')
相似於:
cd foo/bar cd /tmp/file/ cd .. cd a/../subfile pwd
不一樣點在於路徑不須要存在,也能夠是一個文件。
例子:
path.resolve('/foo/bar', './baz') // returns '/foo/bar/baz' path.resolve('/foo/bar', '/tmp/file/') // returns '/tmp/file' path.resolve('wwwroot', 'static_files/png/', '../gif/image.gif') // if currently in /home/myself/node, it returns '/home/myself/node/wwwroot/static_files/gif/image.gif'
例子: 若是將空字符串做爲參數,他會被自動替換成當前工做目錄。
平臺特定的文件分隔符。 '\\'
或者 '/'。
LINUX或UNIX下的例子:
'foo/bar/baz'.split(path.sep) // returns ['foo', 'bar', 'baz']
windows下的例子:
'foo\\bar\\baz'.split(path.sep) // returns ['foo', 'bar', 'baz']
提供訪問path前綴的方法可是會在win32的兼容方式下相互影響。