node中path.resolve和path.join区别

  • 相同点:对于 ./ 和 ../ 处理方式相同,按照常规相对路径理解就可以
  • 不同点:
  1. resolve会返回一个绝对路径,join会返回一个路径字符串,我把它理解为相对路径吧;
  2. 对于 / 的处理方式不同,resolve把 / 当作根路径处理,join把 / 忽略。

通过实例说明一下(以下是windows系统测试,苹果和Linux会有些不一样,理解原理即可)

path.join

/* 测试常规用法 */
path.join('a', 'b', 'c')
// 过程    \\a -> \\a\\b -> \\a\\b\\c
// 结果    \\a\\b\\c

/* 测试一堆 / 的处理 */
path.join('/a//', '//b//', '///c')
// 过程    \\a -> \\a\\b -> \\a\\b\\c
// 结果    \\a\\b\\c
// 解释:和上一个结果相同,因为不管多少个/都会被忽略

/* 测试 ./ 的处理 */
path.join('a', './b', './c')
// 过程    \\a -> \\a\\b -> \\a\\b\\c
// 结果    \\a\\b\\c
// 解释:和第一个结果仍相同,因为./代表当前路径,有没有./含义都是一样的

/* 测试 ../ 的处理 */
path.join('a', 'b', '../c')
// ps:可以把它看作这样的形式:path.join('a', 'b', '../', 'c')
// 过程    \\a -> \\a\\b -> \\a(遇到../变成上一级目录,所以又回到\\a) -> \\a\\c
// 结果    \\a\\c

path.resolve

先声明,当前命令行窗口在E:\Books目录下,如下图

node中path.resolve和path.join区别_第1张图片

/* 常规用法 */
path.resolve('a', 'b', 'c')
// 过程    E:\\Books -> E:\\Books\\a -> E:\\Books\\a\\b -> E:\\Books\\a\\b\\c
// 结果    E:\\Books\\a\\b\\c
// 解释:和join相比,就是以当前路径为绝对路径,依次向后拼接

/* / 的处理,这里和join有区别 */
path.resolve('a', '/b', 'c')
// ps:可以看作这样形式:path.resolve('a', '/', 'b', 'c')
// 过程    E:\\Books -> E:\\Books\\a -> E:(遇见/,直接回到磁盘根路径,当前是E盘) -> E:\\b -> E:\\b\\c
// 结果    E:\\b\\c
// 解释:本人用的win系统,遇见/直接回到盘符位置,苹果系统可自行测试

/* ./ 的处理 */
path.resolve('./a', './b', './c')
// 过程    E:\\Books -> E:\\Books\\a -> E:\\Books\\a\\b -> E:\\Books\\a\\b\\c
// 结果    E:\\Books\\a\\b\\c
// 解释:和第一种结果相同,./被看作当前路径,写不写效果一样

/* ../ 的处理 */
path.resolve('a', '../b', 'c')
// ps:可看作这种形式:path.resolve('a', '../', 'b', 'c')
// 过程    E:\\Books -> E:\\Books\\a -> E:\\Books(遇见../,变成上一级目录) -> E:\\Books\\b -> E:\\Books\\b\\c
// 结果    E:\\Books\\b\\c

 

你可能感兴趣的:(Node)