一个技巧彻底理解 path.join 和 path.resolve 的区别

您所在的位置:网站首页 join和resolve的区别 一个技巧彻底理解 path.join 和 path.resolve 的区别

一个技巧彻底理解 path.join 和 path.resolve 的区别

2023-07-27 10:15| 来源: 网络整理| 查看: 265

自彼此相遇的一瞬间起人们就开始做出判断。这里的“瞬间”指1/25秒,这就是辨认陌生人的面部表情是否愤怒所花的时间,只要39毫秒。在约十分之一秒的更加耐心的考虑后,人们就能判断出陌生人的长相是否有吸引力、有多么可爱、是否值得信赖,这一判断的准确性和仔细审视该陌生人的面孔一分钟后得出的完全一样。而只要观察该陌生人和异性5秒钟的聊天场面,人们就能确定他/她的外向程度、良知水平和智力高低。人们妄下结论的速度太快,太快了

前言

前一段时间,有个同事问我 path.join 和 path.resolve 之间有什么区别,我说:一个是拼接路径,一个是返回绝对路径。然后他就向我滔滔不绝的说起 join 和 resolve 在解析上的各种规则(专业术语),总之就是不说“人话”(希望不要被他看见~)

在我看来,事情理解的越简单越好,说多了反而记不住。所在今天在这分享一下我自己对 join 和 resolve 的理解。分享对象,主要是对于初学者和用的比较少的同学,大佬可以忽略~

以下内容只说最重要的几个点,废话不多说

path.join

1、拼接路径,将几个参数按顺序拼接在一起(如果第一个参数为 __dirname,则可能会拼接成一个新的绝对路径)

2、简单的拼接,除了 ./ ../ 等操作符会被解析外,其他的都是纯粹的拼接,并且会去掉多余的点或斜杆

3、如果参数为空字符串,则返回一个点,代表当前目录(这个也很合理)

代码演示

路径的正反斜杠不要在意,由操作系统决定

// 输出:qq\ww,只是简单的无脑拼接 console.log(path.join('qq', 'ww')); // 输出:\qq\ww\ee\rr\tt,同上 console.log(path.join('/qq/ww/ee', 'rr/tt')); // 输出:D:\a\b\c\index.js\qq\ww\ee\rr\tt // 可以看到即使第一个路径的最后不是文件夹,也依然按顺序拼接 // 事实上 join 和 resolve 并不会对最后一层路径是文件还是文件夹做出分辨 console.log(path.join('D:\a\b\c\index.js', '/qq/ww/ee', 'rr/tt')); // 输出:D:\a\b\c\index.js\qq\ww\ee\rr\ // 最后的 .. 使路径回到了上一层 console.log(path.join('D:\a\b\c\index.js', '/qq/ww/ee', 'rr/tt', '..')); // 输出:.,结果为一个点,代表当前文件夹 // 注意这个当前文件夹,代表的是 node 启动程序的路径,不是当前文件所在的目录 console.log(path.join('')); 复制代码 path.resolve

1、解析为绝对路径(一定是绝对路径)

2、解释一下文章标题所谓的技巧:

在执行 resolve 方法时,可以想象成在命令行切路径

当前的路径是执行 node 启动程序的路径(简单说,就是你在终端输入:node xxx.js 时所在的路径),每个参数依次使用 cd 指令,结果和在命令行切换路径的效果相同

根据 cd 命令行的理解:

只要参数的第一个字符是:/ ,相当于:cd / ,就会切换到根路径(注意:在 window 中,'X:/' 同理) 如果解析的参数中,没有根路径,则会在前面拼接上执行当前进程的 node 启动程序路径

在 window 操作系统中,可以单独的切换盘符,而不改变后面的路径

代码演示

路径的正反斜杠不要在意,由操作系统决定。

// 输出:D:\uu\oo\pp\mm // 1. 默认为 node 启动终端路径 // 2. cd D:/a/b,切换到了 D 盘:D:/a/b // 3. cd ./qq,切换到了 qq 下:D:/a/b/qq // 4. cd /uu/oo,遇到了 /,重新定义路径:D:/uu/oo // 5. cd ./pp,切换到 pp 下:D:/uu/oo/pp // 6. cd uioop,切换到了 uioop 下:D:/uu/oo/pp/uioop // 7. cd ../mm,切换到上一层文件夹的 mm 下:D:/uu/oo/pp/mm // 可以看到按照 cd 切换顺序,得到了最终结果:D:/uu/oo/pp/mm,其他演示原理同上 console.log(path.resolve('D:/a/b', './qq', '/uu/oo', './pp', 'uioop', '../mm')); // 输出:D:\ZCODE\qq\ww // 这里的终端路径是:D:\ZCODE\,会自动解析 console.log(path.resolve('qq', 'ww')); // 输出:D:\ww,原理同上 console.log(path.resolve('qq', '/ww')); // 输出:C:\,切换盘符和根路径 console.log(path.resolve('qq', '/ww/ee', 'C:/')); // 输出:C:\ww\ee,只切换盘符 console.log(path.resolve('qq', '/ww/ee', 'C:')); 复制代码 最后

以上就是我自己的一些理解,希望能给有需要的同学提供一些帮助,当然,如果有说的不对的地方,也请大家不吝指出![抱拳]



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3