path.join & path.relsove 的区别
看了很多博客,发现都是直接照抄 NODE
官方文档.
连例子都一模一样.
感觉看不太懂.于是就自己体就琢磨了一下.
path.join
path.join
理解起来非常简单
它的作用仅仅是使用正确的系统路径分隔连接路径字符串
const path = require('path')
path.join('////////a','b////')
输出结果:
/a/b
- 如果让我们自己拼接
////////a
,b////
为一个正确的路径,- 我们必须把
/////////a
->/a
- 我们必须把
b////
->b/
- 在拼接
/a
和 'b/' 的之前,还需要在/a
后面加一个/
->/a/
- 最终变成
/a/b
- 我们必须把
如果操作系统不同,不如
mac
里用/
, 而windows
中\
,我们还需要根据操作系统类型,修改用户输入错误的路径分隔符.
补充:
path.join
仅仅是把传入的参数以当前操作系统正确的路径方式拼接,仅此而已.
path.reslove
我这里也要引用一下官方解释了..
path.reslove([from...],to)
官方解释为:把一些列路径解析成
to
的绝对路径.
光看这种解释,还是比较懵逼.
但至少可以得到2条信息
- 最总路径里一定包含
to
的名字. - 最终返回的一定是个绝对路径.
例子1:
假如现在有一个 reslove.js
,此js文件在 /Users/relax/Desktop/代码/前端学习/想法测试/aboutNode/
文件夹中.
console.log(path.resolve('a','b','c','d'))
执行上述那段代码,就相当于当前搜出的js文件路径(/Users/relax/Desktop/代码/前端学习/想法测试/aboutNode/
)的终端环境下依次输入
/Users/relax/Desktop/代码/前端学习/想法测试/aboutNode> cd a
/Users/relax/Desktop/代码/前端学习/想法测试/aboutNode//a> cd b
/Users/relax/Desktop/代码/前端学习/想法测试/aboutNode/a/b> cd c
/Users/relax/Desktop/代码/前端学习/想法测试/aboutNode/a/b/c> cd d
/Users/relax/Desktop/代码/前端学习/想法测试/aboutNode/a/b/c/d> pwd
/Users/relax/Desktop/代码/前端学习/想法测试/aboutNode/a/b/c/d
由于 d
是 path.reslove()
函数的最后一个参数.
path.reslove
又最终返回的是一个绝对路径.
所以,这里的返回值是
/Users/relax/Desktop/代码/前端学习/想法测试/aboutNode/a/b/c/d
例子2
假如现在有一个 reslove.js
,此js文件在 /Users/relax/Desktop/代码/前端学习/想法测试/aboutNode/
文件夹中.
console.log(path.resolve('a','b','/c','f'))
里面有一个特殊的直接表示系统根路径的 /c
根据上述的规律,应该输出 /c/f
最后输出的结果也是对应上的.
例子3
假如现在有一个 reslove.js
,此js文件在 /Users/relax/Desktop/代码/前端学习/想法测试/aboutNode/
文件夹中.
console.log(path.resolve('a','b','c','/f'))
直接输出 /f
因为在终端里直接输入 cd /f
就是进入到根目录的 f
文件夹里.
path.reslove([from..],to) 运行原理说明
根据传入参数,类似在此函数执行的路径下开启了一个终端,并以此 cd 参数.只到解析到
to
的路径为止.
path.join() & path.resolve()
-
path.join
单纯的以正确的路径分割符拼接字符串路径. -
path.reslove
, 类似于在内部调用了终端命令,挨个cd
传入的参数,直到遇到to
为止. - 它俩都不关心最终出来的字符串路径是否真实存在.