path.resolve()和path.join()的区别

141 阅读1分钟

__dirname 和 __filename 的区别

概念解释:

__dirname: 表示当前执行node环境的路径

__filename: 表示获取当前的执行文件, 简单理解:就是在 __dirname上加上文件的名字。

代码演示:

//app.js

console.log(__dirname)
console.log(__filename)

运行结果

PS D:\Users\Administrator\Desktop\demo> node app.js
D:\Users\Administrator\Desktop\demo
D:\Users\Administrator\Desktop\demo\app.js
PS C:\Users\Administrator\Desktop\demo>  

path.join() 和 path.resolve()的区别

path.join 连接路径

将路径片段使用特定的分隔符``连接起来形成路径,并规范化生成的路径。若任意一个路径片段类型错误,会报错

console.log(path.join('/james', 'nba/kobe', 'curry', '', '\aa', 'bb'));
//\james\nba\kobe\curry\aa\bb

console.log(path.join('/james', 'nba/kobe', 'curry', 1, '\aa', 'bb'));
// 1 是number类型, 从而报错

注意:

  • 如果是空字符串,则会跳过
  • 如果 字符串中存在 \, 就会删除\,然后进行拼接。比如:\aa 就会变成 aanba\kobe转为nbakobe。(不一定正确,\b就有点特殊)
  • 如果传入的参数,不是字符串类型,直接报错
  • 如果传入的是.., 则会退一级

path.resolve 连接路径

将参数字符串解析为一个绝对路径。解析的过程值从右到左解析的。知道构造成一个绝对的路径。 / 作为根路径

const str = path.resolve('/foo/bar', 'baz') 
console.log(str);   //D:\foo\bar\baz

const str = path.resolve('/foo/bar', '/baz') 
console.log(str);   //D:\baz

const path1 = path.resolve('/foo/bar', '/baz') 
console.log(path1);  //D:\baz

const path2 = path.resolve('/foo/bar','..', 'baz') 
console.log(path2);  //D:\foo\baz

const path3 = path.resolve('foo/bar','..', 'baz') 
console.log(path3);  //D:\Users\Administrator\Desktop\demo\foo\baz

注意:

  • 从左往右解析,主要一遇到/,就会停止解析。
  • 遇到..也会退一级
  • 如果解析到最左边,还是没有遇到/,就会读取磁盘的路径