前言:
初学 NodeJS的小伙伴一定会对 path.resolve 和 path.join 这两个输出路径的方法有迷惑,那我就给大家分享一下,这两个方法的区别吧。
Path.join
功能:
path.join()
方法使用特定于平台的分隔符作为定界符将所有给定的 path
片段连接在一起,然后规范化生成的路径。
零长度的 path
片段被忽略。 如果连接的路径字符串是零长度字符串,则将返回 '.'
,表示当前工作目录。
如果任何路径片段不是字符串,则抛出 TypeError
path.join('/foo', 'bar', 'baz/asdf', '..','quux');
// 返回: '/foo/bar/baz/quux'
path.join('/foo', 'bar', 'baz/asdf','quux');
// 返回: '/foo/bar/baz/asdf/quux'
path.join('/foo', 'bar', 'baz/asdf','.','quux');
// 返回: '/foo/bar/baz/asdf/quux'
// .. 表示跳转到上一级目录继续拼接
// . 表示跳转到当前目录继续拼接
path.join('foo', {}, 'bar');
// 抛出 'TypeError: Path must be a string. Received {}'
总结:
path.join 就是正常的从左到右拼接所有的路径(必须是字符串形式的路径),遇到 .. 或者 . 的时候需要特殊处理一下,跳转一下路径继续拼接即可。
Path.resolve
功能:
方法将路径或路径片段的序列解析为绝对路径。
如果在处理完所有给定的 path
片段之后,还没有生成绝对路径,则使用当前工作目录。
生成的路径被规范化,并删除尾部斜杠(除非路径解析为根目录)。
零长度的 path
片段被忽略。
如果没有传入 path
片段,则 path.resolve()
将返回当前工作目录的绝对路径。
path.resolve('/foo/bar', './baz');
// 地址从右向左开始拼接,遇到 . 继续拼接上一段,直到拼接成一个路径停止
// 返回: '/foo/bar/baz'
path.resolve('/foo/bar', '/tmp/file/');
// 地址从右向左开始拼接, 当解析到 /tmp/file的时候已经是绝对路径了,就停止拼接
// 返回: '/tmp/file'
path.resolve('/static_files/png/', '../gif/image.gif');
// 地址从右向左开始拼接, 遇到 .. 继续拼接上一段路径,同时忽略上一段路径最后的文件夹名字
// 返回 '/static_files/gif/image.gif'
path.resolve('wwwroot', 'static_files/png/', '../gif/image.gif');
// 地址从右向左开始拼接, 遇到 .. 继续拼接上一段路径,同时忽略上一段路径最后的文件夹名字
// 如果当前工作目录是 /home/myself/node,
// 则返回 '/home/myself/node/wwwroot/static_files/gif/image.gif'
总结:
地址从右向左开始拼接,只要拼成绝对路径就立刻返回此路径!