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’不带‘/’。