目录
前言
之前觉得很简单没有记录,果不其然,忘了,还是浅记一下path.resolve与path.join如何使用,毕竟文件中各种乱七八糟的路径位置一直都容易让人混乱。
path.resolve
无参数时
path.resolve()可以得到当前工作路径,也就是编写path.resolve()代码的js文件所在位置。
CommonJS模块可以通过__dirname获得相同值,也是当前工作路径位置。
ES6模块不支持__dirname,因此ES6使用__dirname得先声明。
import path from 'path' const __dirame = path.resolve()
有参数时
看成从当前路径开始执行cd操作,且跳转目录允许不存在。
假设我文件当前路径开始为C:\Users\user\Desktop。
在C:\Users\user\Desktop上执行cd /跳转绝对路径会回到c盘上,也就是根目录。
console.log(path.resolve('/'))// C:\
1
在C:\Users\user\Desktop上执行cd /会回到c盘C:\上,再执行cd /test又是绝对路径会到C:\test,最后执行cd /path还是绝对路径结果为C:\path,我们发现只要是绝对路径,前面的跳转就没什么意义了,path.resolve('/','/test','/path')等同于path.resolve('/path'),以后我们可以从最后一个绝对路径开始看,前面直接忽略。
console.log(path.resolve('/','/test','/path'))// C:\path
在C:\Users\user\Desktop上执行cd test会到C:\Users\user\Desktop\test,再执行cd path又会到C:\Users\user\Desktop\test\path,注意:即使test、path文件夹不存在,返回的仍然是这个。
console.log(path.resolve('test','path'))// C:\Users\user\Desktop\test\path
path.join
- path.join只是返回字符串路径的拼接,只会拼接出看起来规范合理的路径,因此结合两个字符串时,下面三种情况结果都一样。
console.log(path.join('/test','./path'))// \test\path console.log(path.join('/test','/path'))// \test\path console.log(path.join('/test','path'))// \test\path
- 个人认为path.join没有很合理容易揣摩的规则,多种情况结果一致容易产生误解,因此更建议使用path.resolve。