Node 之 path模块中的join与resolve 彻底搞懂

时间:2025-02-24 07:10:37

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

()

方法会将所有给定的 path 片段连接到一起(使用平台特定的分隔符作为定界符),然后规范化生成的路径
注意:

  1. 长度为零的 path 片段会被忽略。
  2. 如果连接后的路径字符串为长度为零的字符串,则返回 ‘.’,表示当前工作目录。
  3. 尾部的斜杠不会被删除

()

方法会将路径或路径片段的序列解析为绝对路径
给定的路径序列会从右到左进行处理,后面的每个 path 会被追加到前面,直到构造出绝对路径

注意:

  1. 如果在处理完所有给定的 path 片段之后还未生成绝对路径,则会使用当前工作目录。
  2. 生成的路径会被规范化,
  3. 尾部的斜杠会被删除(除非路径被解析为根目录)。
  4. 零长度的 path 片段会被忽略。
  5. 如果没有传入 path 片段,则 () 会返回当前工作目录的绝对路径。

关键点对比

join resolve
规范化生成的路径 规范化生成的路径
相对路径 绝对路径
从左到右进行处理 从右到左进行处理
所有path 片段连接到一起 构造出绝对路径为止
长度为零的 path 片段会被忽略 长度为零的 path 片段会被忽略
连接后的path长度为0,返回 当前目录 连接后的path长度为0,返回 工作目录
尾部的斜杠不会被删除 尾部的斜杠被删除

() 示例说明

相对路径
所有给定的 path 片段连接到一起
规范化生成的路径

path.join('/目录1', '/目录2', '目录3'); // \目录1\目录2\目录3

长度为零的 path 片段会被忽略。

path.join('/目录1', '', '目录3'); // \目录1\目录3

如果连接后的路径字符串为长度为零的字符串,则返回 ‘.’,表示当前工作目录。

path.join('', '', ''); // .

() 示例说明

绝对路径
从右到左进行处理,直到遇到根目录为止,构造出绝对路径
规范化生成的路径

path.resolve('/'); // D:\

从右到左进行处理,直到遇到根目录为止,构造出绝对路径
‘目录3’ 是绝对路径,包含根目录,

path.resolve('/目录1', '/目录2', '/目录3');  // D:\目录3

从右到左进行处理,直到遇到根目录为止,构造出绝对路径
‘目录3’ 不是绝对路径, ‘/目录2’ 中的 ‘/’ 代表根目录,是绝度路径

path.resolve('/目录1', '/目录2', '目录3');   // D:\目录2\目录3

如果在处理完所有给定的 path 片段之后还未生成绝对路径,则会使用当前工作目录。

path.resolve('目录1', '目录2', '目录3');  // D:\nodejs\api_learn\目录1\目录2\目录3

尾部的斜杠会被删除

path.resolve('/目录1', '目录2/'); // D:\目录1\目录2
path.join('/目录1', '目录2/'); // \目录1\目录2\

尾部的斜杠会被删除(除非路径被解析为根目录)

path.resolve('/目录1', '/'); // D:\

零长度的 path 片段会被忽略。

path.resolve('/目录1', '', '目录3'); // D:\目录1\目录3

如果没有传入 path 片段,则 () 会返回当前工作目录的绝对路径。

path.resolve(); // D:\nodejs\api_learn