path模块中的join()与resolve()的区别
()
方法会将所有给定的 path 片段连接到一起(使用平台特定的分隔符作为定界符),然后规范化生成的路径。
注意:
- 长度为零的 path 片段会被忽略。
- 如果连接后的路径字符串为长度为零的字符串,则返回 ‘.’,表示当前工作目录。
- 尾部的斜杠不会被删除
()
方法会将路径或路径片段的序列解析为绝对路径。
给定的路径序列会从右到左进行处理,后面的每个 path 会被追加到前面,直到构造出绝对路径。
注意:
- 如果在处理完所有给定的 path 片段之后还未生成绝对路径,则会使用当前工作目录。
- 生成的路径会被规范化,
- 尾部的斜杠会被删除(除非路径被解析为根目录)。
- 零长度的 path 片段会被忽略。
- 如果没有传入 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