前言
使用node中的path的时候,虽然常用的就那么几个,但是如果经常不用的话,还是经常混淆的,这就证明咱们掌握的不是很熟练,所以如何高效记忆,快速应用,就是我们本章要探讨的内容
1. __dirname, __filename, process.cwd()的区别是什么
比如我们现在有一个目录
demo
- src
- dist
file.js
file.js内容如下
console.log(__dirname);
console.log(__filename);
console.log(process.cwd());
我现在在demo目录执行 node ./dist/file.js
输出结果如下
/Users/wangsen/Desktop/frontDemo/demo/dist
/Users/wangsen/Desktop/frontDemo/demo/dist/file.js
/Users/wangsen/Desktop/frontDemo/demo
__dirname返回的是当前模块文件所在的目录路径__filename返回的是当前模块文件的完整路径- 而
process.cwd()返回的是Node.js进程的当前工作目录的路径。
2. path.dirname(),path.basename(), path.extname()的区别是什么?
这里我们和上面的三个方法一起来看,方便记忆
他们三个都是方法,都要输入参数
更改一下file.js内容
const path = require('path');
console.log(path.dirname(__filename));
console.log(path.basename(__filename));
console.log(path.extname(__filename));
输出结果如下
/Users/wangsen/Desktop/frontDemo/demo/dist
file.js
.js
从输入结果我们可以看出三个方法的作用
dirname方法用于获取path的目录路径basename方法用于获取path的文件路径extname方法用于获取path的扩展名
3. path.join()和path.resolve()的区别
你有没有思考🤔过这样一个问题,为什么有了path.join以后还需要path.resolve呢?平常我们使用他们都是用来拼接路径的,所以我们没有特别注意他们的区别,那么什么时候使用谁呢?
不同点
path.join()和path.resolve()都是path模块中的方法,用于处理文件路径,但它们的作用略有不同。
- path.join():主要用于
拼接路径,返回的不一定是一个绝对路径。 - path.resolve():用于将多个路径片段解析成一个
绝对路径。但是如果给定的路径是相对路径(比如node),则会以当前工作目录为基准进行解析。
根据具体的需求,选择使用path.join()还是path.resolve()。如果只需要简单地拼接路径,可以使用path.join();如果需要解析为绝对路径并考虑路径的有效性,可以使用path.resolve()。
使用场景
-
path.join()的使用场景:
- 例如,拼接文件路径:
path.join('/home/user', 'project', 'file.txt')返回'/home/user/project/file.txt'。
- 例如,拼接文件路径:
-
path.resolve()的使用场景:
- 例如,解析相对路径:
path.resolve('project', 'file.txt')返回'/current/working/directory/project/file.txt'。 - 例如,解析绝对路径:
path.resolve('/home/user', 'project', 'file.txt')返回'/home/user/project/file.txt'。
- 例如,解析相对路径:
综上所述,path.join()适用于简单的路径拼接场景,而path.resolve()适用于解析为绝对路径并考虑路径的有效性的场景。选择使用哪个方法取决于具体的需求和使用场景。
4. path.relative()
path.relative之所以我们也经常忘记,是因为我们用的也不多。
path.relative(from, to)接受两个参数,from和to,分别表示起始路径和目标路径。它会计算出从起始路径到目标路径的相对路径,并返回这个相对路径。
使用场景
demo
- src
relative.js
比如我想计算一下relative.js到主目录demo的相对路径,我们就可以写成
const path = require('path');
console.log(path.relative(__filename, process.cwd()));
输出结果
../..
总结
感觉今天写的这个文章有点像文档,方便查阅