详解nodeJS里的path.join 和 path.resolve方法

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 详解nodeJS里的path.join 和 path.resolve方法

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


相关文章
|
6月前
|
资源调度 JavaScript
nodeJS 的 npm 设置国内高速镜像之淘宝镜像的方法
nodeJS 的 npm 设置国内高速镜像之淘宝镜像的方法
5769 2
|
6月前
|
JavaScript Windows
Win7内网安装高版本的Node方法,亲测有效node-v16.16.0
Win7内网安装高版本的Node方法,亲测有效node-v16.16.0
743 1
|
3月前
|
Kubernetes Ubuntu Windows
【Azure K8S | AKS】分享从AKS集群的Node中查看日志的方法(/var/log)
【Azure K8S | AKS】分享从AKS集群的Node中查看日志的方法(/var/log)
136 3
|
3月前
|
JavaScript Linux
2022年超详细在CentOS 7上安装Node.js方法(源码安装)
这篇文章介绍了在CentOS 7系统上通过源码安装Node.js的详细步骤,包括从官网下载Node.js源码包、将安装包上传至虚拟机、解压安装包、删除压缩文件、编译安装Node.js、检查Node.js和npm版本,以及切换npm源到淘宝镜像以加速下载。此外,还提供了一个获取Linux下Node.js离线安装包的微信公众号搜索方式。
|
4月前
|
JavaScript Ubuntu Shell
Ubuntu上安装任意版本nodejs方法
通过以上步骤,您可以在Ubuntu系统上灵活地安装和管理不同版本的Node.js。这种方法让开发者能够根据不同项目的需要选择合适的Node.js版本,同时也使版本切换变得非常方便。而且,nvm能够为每个项目独立管理依赖,从而确保不同项目之间的环境隔离,增强了开发环境的稳定性和可维护性。
1144 2
|
3月前
|
缓存 JavaScript 前端开发
微信 JS-SDK Demo “分享信息设置” API 及数字签名生成方法(NodeJS版本)
微信 JS-SDK Demo “分享信息设置” API 及数字签名生成方法(NodeJS版本)更新时间(2020-10-29)
|
4月前
|
JavaScript 前端开发 API
Node中的AsyncLocalStorage 使用问题之AsyncHook 的 enable 方法工作的问题如何解决
Node中的AsyncLocalStorage 使用问题之AsyncHook 的 enable 方法工作的问题如何解决
|
JavaScript
node.js入门学习(2):使用http-server创建简单的http服务的方法
node.js入门学习(2):使用http-server创建简单的http服务的方法
84 0
|
前端开发 JavaScript 安全
下一篇
无影云桌面