path.join & path.resolve

path.join([path1][, path2][, …])

path.join(): 连接任意多个路径字符串。

注:如果连接后的路径字符串是一个长度为零的字符串, 则返回 '.', 表示当前工作目录。

path.join('foo', 'bar', 'baz')
// 返回
'/foo/bar/baz'

// 不合法的字符串将抛出异常
path.join('foo', {}, 'bar')
// 抛出的异常
TypeError: Arguments to path.join must be strings'

path.resolve([from…], to)

path.resolve(): 将多个路径解析为一个规范化的绝对路径。

其处理方式类似于对这些路径逐一进行 cd 操作, 与 cd 操作不同的是, 这引起路径可以是文件, 并且可不必实际存在(resolve()方法不会利用底层的文件系统判断路径是否存在, 而只是进行路径字符串操作。)

path.resolve('foo/bar', '/tmp/file/', '..', 'a/../subFile') 相当于:

cd foo/bar
cd /tmp/file/
cd ..
cd a/../subFile
pwd
# Linux pwd命令用于显示工作目录。执行 pwd 指令可立刻得知您目前所在的工作目录的绝对路径名称。
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'

两者的区别

  • join 是把各个 path 片段连接在一起, resolve'/' 当成根目录
path.join('/a', '/b') // '/a/b'
path.resolve('/a', '/b') // '/b'
  • join 直接拼接字段,resolve 解析路径并返回绝对路径
path.join('a', 'b1', '..', 'b2')
// 'a/b2'

path.resolve('a', 'b1', '..', 'b2')
// '/home/myself/node/a/b2'