Node-path
path.basename(path[, ext])
- 返回 path
的最后一部分。 尾部的目录分隔符将被忽略。
path.basename('/foo/bar/baz/asdf/quux.html');
// 返回: 'quux.html'
path.basename('/foo/bar/baz/asdf/quux.html', '.html');
// 返回: 'quux'
path.dirname(path)
- 返回 path
的目录名。 尾部的目录分隔符将被忽略。
path.dirname('/foo/bar/baz/asdf/quux');
// 返回: '/foo/bar/baz/asdf'
path.extname(path)
- 返回 path
的扩展名,从最后一次出现 .
(句点)字符到 path
最后一部分的字符串结束。 如果在 path
的最后一部分中没有 .
,或者如果 path
的基本名称(参阅 path.basename()
)除了第一个字符以外没有 .
,则返回空字符串。
path.extname('index.html');
// 返回: '.html'
path.extname('index.coffee.md');
// 返回: '.md'
path.extname('index.');
// 返回: '.'
path.extname('index');
// 返回: ''
path.extname('.index');
// 返回: ''
path.extname('.index.md');
// 返回: '.md'
path.join([...paths])
方法使用平台特定的分隔符作为定界符将所有给定的 path
片段连接在一起,然后规范化生成的路径。
零长度的 path
片段会被忽略。 如果连接的路径字符串是零长度的字符串,则返回 '.'
,表示当前工作目录。
path.join('/foo', 'bar', 'baz/asdf', 'quux', '..');
// 返回: '/foo/bar/baz/asdf'
path.join('foo', {}, 'bar');
// 抛出 'TypeError: Path must be a string. Received {}'
path.relative(from, to)
path.relative()
方法根据当前工作目录返回 from
到 to
的相对路径。 如果 from
和 to
各自解析到相同的路径(分别调用 path.resolve()
之后),则返回零长度的字符串。
如果将零长度的字符串传入 from
或 to
,则使用当前工作目录代替该零长度的字符串。
path.relative('/data/orandea/test/aaa', '/data/orandea/impl/bbb');
// 返回: '../../impl/bbb'
path.resolve([...paths])
path.resolve()
方法将路径或路径片段的序列解析为绝对路径。
给定的路径序列从右到左进行处理,每个后续的 path
前置,直到构造出一个绝对路径。 例如,给定的路径片段序列:/foo
、 /bar
、 baz
,调用 path.resolve('/foo', '/bar', 'baz')
将返回 /bar/baz
。
如果在处理完所有给定的 path
片段之后还未生成绝对路径,则再加上当前工作目录。
生成的路径已规范化,并且除非将路径解析为根目录,否则将删除尾部斜杠。
零长度的 path
片段会被忽略。
如果没有传入 path
片段,则 path.resolve()
将返回当前工作目录的绝对路径。
path.resolve('/foo/bar', './baz');
// 返回: '/foo/bar/baz'
path.resolve('/foo/bar', '/tmp/file/');
// 返回: '/tmp/file'
path.resolve('wwwroot', 'static_files/png/', '../gif/image.gif');
// 如果当前工作目录是 /home/myself/node,
// 则返回 '/home/myself/node/wwwroot/static_files/gif/image.gif'
path.sep
提供平台特定的路径片段分隔符:
- Windows 上是
\
。 - POSIX 上是
/
。
例如,在 POSIX 上:
'foo/bar/baz'.split(path.sep);
// 返回: ['foo', 'bar', 'baz']
区别
1、join是把各个path片段连接在一起, resolve把‘/’当成根目录
path.join('/a', '/b');
// /a/b
path.resolve('/a', '/b');
// /b
2、resolve在传入非/路径时,会自动加上当前目录形成一个绝对路径,而join仅仅用于路径拼接
// 当前路径为
/Users/xiao/work/test
path.join('a', 'b', '..', 'd');
// a/d
path.resolve('a', 'b', '..', 'd');
// /Users/xiao/work/test/a/d