nodejs中的path.json和path.resolve的区别

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

nodejs中的path.json和path.resolve的区别

我们有多少次在 Node.js 项目中遇到过path.join()path.resolve()却没有真正理解它们之间的区别本文就讲解一下这两者的区别。

重要术语

首先我们先来看看几个术语便于后续我们掌握这两者的差异。

  1. 字符串字符串是一串字符按字面解释的字符序列例如 "this is a string"。如果有多个单词则必须用引号将它们引起来。

  2. 路径路径只是一个字符串用于标识计算机上文件或目录的位置例如"/home/user/Documents/file.ext""/home/user/Downloads/"。这里使用“文件”一词来指代文件和目录。

  3. 相对路径相对路径是一个字符串用于标识一个文件相对于另一个文件位置的位置。
    例如假设某个用户具有以下目录结构
    在这里插入图片描述

如果 Downloads 是当前的工作目录并且用户想要访问 Documents 目录中的文件则他必须向上导航一级然后向下进入 Documents 目录。在 POSIX 兼容系统LinuxMacOS 等上类似cd ../Documents/file.ext 或者在 Windows 上类似 cd ..\Documents\file.ext

注意 如果文件名中存在空格需要用引号将字符串引起来。尝试执行cd ../Documents/my file.ext会报错。

  1. 绝对路径简单来说绝对路径是标识文件相对于系统根目录的位置的字符串。例如用户可以指定 cd /home/user/Documents/file.ext 这样的绝对路径而不是尝试通过相对路径访问上一示例中的文件。我们可以从任何位置指定绝对路径。

  2. 路径段路径段是路径的一部分。例如我们有/home/user/Documents作为 /home/user/Documents/file.ext 的段。

  3. __dirname这是一个 Node.js 环境变量指定包含当前正在执行的文件的目录的绝对路径。

比如我们在/home/user/Documents/project文件夹下有一个index.js文件里边的内容是:

console.log(__dirname);

// 控制台上的预期输出为 /home/user/Documents/project

换句话说__dirname只是文件位置的绝对路径的字符串。

在终端/提示符上更改目录

../代表当前文件夹目录

..../代表当前文件夹的上一级

/代表根目录

如果我们放在cd他们面前(cd xxx)他们就会带我们到想要的位置

path.join() 的作用

path.join() 方法使用平台特定的分隔符作为分隔符将所有给定的 path 段连接在一起然后规范化结果路径。

语法

path.join(...paths)

例如调用path.join("path", "/to", "some", "file") 将会返回path/to/some/file字符串。

path.resolve() 的作用

path.resolve() 方法将一系列路径或路径段解析为绝对路径。

语法

path.resolve(...paths)

此方法从右到左处理路径当找到/时将其视为系统的根。

调用path.resolve(__dirname, "/path")将返回/path因为第二个参数有一个前导/因此将被视为系统的根。

关键区别

path.join()简单地连接段其返回可能会也可能不会产生绝对路径。path.resolve() 始终返回绝对路径使用目标操作系统的根目录作为根目录或使用前导的第一个参数/作为新的根目录。

怎样选择使用哪个

这取决于我们的工具是否需要绝对路径。需要的话使用path.resolve()。只需要连接路径段使用path.join()即可。

path.join()path.resolve()通常会结合__dirname一起使用这使得这两种方法都会产生以操作系统的根为根的绝对路径。

同样调用path.resolve(__dirname, "/path")没有任何意义因为__dirname会被完全忽略因为第二个参数以/开头。以下是一个有效的用例path.resolve(__dirname, 'dist/assets')

使用示例

console.log(path.join(__dirname, "path"));
console.log(path.join(__dirname, "/path"));
console.log(path.join(__dirname, "./path"));
console.log(path.join(__dirname, "../path"));

console.log(path.resolve(__dirname, "path"));
console.log(path.resolve(__dirname, "/path"));
console.log(path.resolve(__dirname, "./path"));
console.log(path.resolve(__dirname, "../path"));

输出

// path.join()
/home/user/some/other/segments/path
/home/user/some/other/segments/path
/home/user/some/other/segments/path
/home/user/some/other/path

//path.resolve()
/home/user/some/other/segments/path
/path
/home/user/some/other/segments/path
/home/user/some/other/path

如果需要当前执行文件的绝对路径则可以选择以下任意一项

console.log(path.join(__dirname, "path"));
console.log(path.join(__dirname, "/path"));
console.log(path.join(__dirname, "./path"));
console.log(path.resolve(__dirname, "path"));
console.log(path.resolve(__dirname, "./path"));
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: NodeJS