vue-cli/node中path.join、path.resolve详解

var path = require("path") //引入node的path模块

Node.js中,__dirname总是指向被执行js文件的绝对路径,所以当你在/d1/d2/myScript.js文件中写了__dirname,它的值就是/d1/d2

  • __dirname: 总是返回被执行的 js 所在文件夹的绝对路径
  • __filename: 总是返回被执行的 js文件的绝对路径

一:path.join()

path.join()方法顾名思义用于连接路径

path.join('/a', '/b', '/c') // /a/b/c

path.join('a', 'b', 'c') // a/b/c

path.join('/a', 'b','..' 'c') // /a/c ".."会向前跳一个目录 

 

二、path.resolve() 将路径或者路径片段解析成绝对路径

path.resolve('/foo/bar', './baz') // /foo/bar/baz
path.resolve('/foo/bar', 'baz') // /foo/bar/baz
path.resolve('/foo/bar', '/baz') // /baz
path.resolve('/foo/bar', '../baz') // /foo/baz
path.resolve('home','/foo/bar', '../baz') // /foo/baz
path.resolve('home','./foo/bar', '../baz') // /home/foo/baz
path.resolve('home','foo/bar', '../baz') // /home/foo/baz
 
path.resolve('a', 'b', 'c') // /Users/siyuan/Desktop/example/node测试/a/b/c//   因为没有遇到第一个绝对路径,所以会一直向上解析(根目录路径/a/b/c)

传入路径从右至左解析,遇到第一个绝对路径解析(字符以 / 开头)停止,不会拼接到前面的路径(因为拼接到此已经是一个绝对路径);

若以 ../ 开头,拼接前面的路径,且不含最后一节路径;

若以 ./ 开头 或者没有符号 则拼接前面路径;

需要注意的是:如果在处理完所有给定的 path 片段之后还未生成绝对路径,则再加上当前工作目录。

三、总结:

通过上面栗子我们可以看到join方法只是拼接路径,也不会像resolve那样遇见/根就直接把整个路径替换跳,而只有在标准的..../相对路径的时候跳出目录。

说白了就是resolve方法是对根路径的而直接变化的,而join方法只会将所有参数拼接,最后形成一个完整的路径(当然遇见..or../会跳出当前目录)。

这个在实际开发中配置还是用到的地方很多的,有时候我们写字符串../src/index.html不生效时,就可以试试resove or join哦。



posted @ 2021-12-21 09:55  赵辉Coder  阅读(1403)  评论(0编辑  收藏  举报