path 模块中 resolve() 与 join() 的区别

path 模块是 Node.js 的一个内置模块,提供了一些处理文件路径的方法,可以规范化我们的文件路径,使用时直接引用即可。

const path = require('path');

其中,我们在拼接路径时 resolve()join() 用的会比较多,这里来介绍一下它们的区别。

path.resolve([…paths])

path.resolve() 方法会返回一个绝对路径,它会按照从右到左的顺序处理每一个路径片段,直到遇到一个绝对路径为止,例如 path.resolve('/foo', '/bar', 'abc') 返回的结果为 /bar/abc

如果传入的路径片段中没有绝对路径,那么就以当前的工作目录为准,附加在结果的最左边,如 ${workplaceDir}/foo/bar;如果 path.resolve() 没有传入任何参数,那么返回的结果就是当前工作目录的绝对路径。

path.resolve('/foo', './bar', 'abc')
// 返回结果:'/foo/bar/abc'

path.resolve('/foo/bar', '/abc/xyz')
// 返回结果:'/abc/xyz'

path.resolve('foo', './bar/abc', 'xyz/xxx')
// 假设当前工作目录的绝对路径为:'/Users/admin'
// 返回结果:'/Users/admin/foo/bar/abc/xyz/xxx'

path.join([…paths])

path.join() 方法会把所有的路径片段拼接在一起,规范化之后返回最终的路径。

如果拼接后的路径长度为0,那么会返回 .,也就是当前的工作目录。

path.join('/foo', '/bar', './abc', 'xyz');
// 返回结果:'/foo/bar/abc/xyz'

path.join('foo', 'bar');
// 返回结果:'foo/bar'

参考资料
https://nodejs.org/api/path.html