详解nodeJS里的path.join 和 path.resolve方法

path.join 定义

path.join([path1][, path2][, ...])
用于连接路径。会把全部给定的 path 片段连接到一起,并规范化生成的路径。

path.join('/foo', 'bar', './baz');
// '/foo/bar/baz'

path.join('/foo', 'bar', '/baz', '..');
// '/foo/bar'

要点:如果连接后的路径字符串是一个长度为零的字符串,则返回 '.',表示当前工作目录。

如果我当前工作目录是 E:\nodejs
path.join('');
// 'E:\nodejs'

path.resolve定义

path.resolve() 方法将路径或路径片段的序列解析为绝对路径

它可以接受多个参数,依次表示所要进入的路径,直到将最后一个参数转为绝对路径。如果根据参数无法得到绝对路径,就以当前所在路径作为基准。除了根目录,该方法的返回值都不带尾部的斜杠。

是不是觉得很难理解?官方大白话都是如此。最好结合代码理解,如下代码:

1.console.log(path.resolve());  //E:\nodejs
2.console.log(path.resolve(''));  //E:\nodejs
3.console.log(path.resolve('.'));  //E:\nodejs
4.console.log(path.resolve(__dirname));  //E:\nodejs
5.console.log(path.resolve('js/common','test'));  //E:\nodejs\js\common\test
6.console.log(path.resolve('./js/common','test'));  //E:\nodejs\js\common\test
7.console.log(path.resolve('js/common','./test'));  //E:\nodejs\js\common\test
8.console.log(path.resolve('./js/common','./test'));  //E:\nodejs\js\common\test
9.console.log(path.resolve('/js/common','test'));  //E:\js\common\test
10.console.log(path.resolve('js/common','/test'));  //E:\test
11.console.log(path.resolve('/js/common','/test'));  //E:\test
12.console.log(path.resolve('/js/common','../test'));  //E:\js\test
13.console.log(path.resolve('js/common','../test'));  //E:\nodejs\js\test

上面代码的已知条件:我当前工作目录是 E:\nodejs

理解要点:
1、从右往左依次解析(很重要,很重要,很重要!!!
2、代码里序号1-4的几种写法会返回当前工作目录。
3、代码里序号5-8中,’test’ 等价于 ‘./test’ :是相对路径,假如相对路径片段在最右侧,则需要向前拼接,
直到遇到以斜杠(/)开头的参数结束,假如直到解析到第一个参数仍然没有遇到以斜杠开头的,则直接拼接到你当前工作目录(也就是 E:\nodejs)。
4、 代码里序号10-11说明的是参数从右至左,遇到第一个以斜杠开头的参数停止解析,无论前面是否还有参数。
5、 ‘../test’ 解析之后就是test的上一级。如代码里序号12,前面是'/js/common',带有'/',所以会以'E:\js\common'作为根目录去拼接'../test',即为'E:\js\test'。
6、代码里序号13跟12之所以不同是因为序号13里的‘js/common’不带‘/’。

你可能感兴趣的:(详解nodeJS里的path.join 和 path.resolve方法)