在做webpack配置时候,以为两者都是进行路径拼接,没进行区别,所以特开此贴记录收获
path.join定义
path.join(path1, path2, ...)
将path路段使用特定分隔符进行拼接(window中是使用“\”),并规范化生成的路径。
// 引入node自带 路径拼接 模块
const path = require('path')
// __dirname 是当前执行的程序所在的目录文件夹的绝对路径
// 当前的工作目录是 E:\join&&resolve
let myPath1 = path.join(__dirname,'/a/b');
let myPath2 = path.join('a', 'b', 'c', 'd/e');
console.log(myPath1); // E:\join&&resolve\a\b
console.log(myPath2); // a\b\c\d\e
path.resolve定义
path.resolve([from...],to)
将路径或路径片段的序列解析为绝对路径(我也是在这里看不懂说啥)
直接上代码演示会更好理解,下面是我总结出来的规律
Tip
-
/
会被解析为根目录(盘符号) -
从最后一个参数开始,如果参数是以
/
开头,则停止解析(斜号在中间不会影响)无论前面是否还有参数 -
假如直到解析到第一个参数仍然没有遇到以斜杠开头的,则直接拼接到当前工作目录(E:\join&&resolve)
-
如果遇到
./
开头,代表是相对路径,还需要向前拼接 -
如果遇到
../
开头,解析之后返回的是路径就是的上一级(看代码理解)
const path = require('path')
// 一定要从右往左看!至于为啥,我也没搞明白(哭泣)
console.log(path.resolve(__dirname,'a')) // E:\join&&resolve\a
console.log(path.resolve(__dirname,'/a')) // E:\a
console.log(path.resolve('a','b')) // E:\join&&resolve\a\b
console.log(path.resolve('/a','b')) // E:\a\b
console.log(path.resolve('/a/b','c')) // E:\a\b\c
console.log(path.resolve('a','/b')) // E:\b
console.log(path.resolve('/a','./b')) // E:\a\b
console.log(path.resolve('./a','./b')) // E:\join&&resolve\a\b
console.log(path.resolve('/a/b','../c')) // E:\a\c
console.log(path.resolve('/a','../c')) // E:\c
console.log(path.resolve('a/b','../c')) // E:\join&&resolve\a\c
console.log(path.resolve('../c')) // E:\c
总结
path.resolve只能掌握到使用规律,惭愧。。。