这个模块包含传递和转换文件路径的公共程序。几乎全部的方法只会在字符串转化的时候执行。 文件系统不会尝试去确认路径是否合法。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的兼容方式下相互影响。