__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就会变成aa;nba\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
注意:
- 从左往右解析,主要一遇到
/,就会停止解析。 - 遇到
..也会退一级 - 如果解析到最左边,还是没有遇到
/,就会读取磁盘的路径