Node.js 中 __dirname 和 ./ 的区别2025年4月26日 | 7 分钟阅读 在 Node.js 中,尽管 __dirname 和 ./ 都用于管理文件和目录路径,但它们的功能和解析方式会因情况而异。全局变量 __dirname 代表脚本正在执行的目录的绝对路径。无论 Node.js 进程从何处启动,它都是固定的,在脚本运行时保持不变。__dirname 非常适合解析与脚本位置相关的路径,以确保文件系统操作的准确性和可移植性。然而,./ 表示 Node.js 进程启动的目录,也就是进程的当前工作目录。 与 __dirname 不同,./ 的值是动态的,如果使用 process.chdir() 修改工作目录,它可能会发生变化。由于 __dirname 与脚本的目录相关,而 ./ 依赖于 Node.js 进程的运行时上下文,因此即使两者都可以用于相对路径解析,它们在工作目录发生变化时也会有不同的表现。在讨论它们的区别之前,我们必须了解 __dirname 和 ./ 的语法和示例。 什么是 __dirname?全局变量 __dirname 对于 Node.js 中的文件和目录管理至关重要。它返回当前正在执行的 JavaScript 文件所在的目录的绝对路径。与 process.cwd()(返回 Node.js 进程启动时的当前工作目录)不同,__dirname 特定于文件本身,独立于脚本的执行位置。 此功能特别适用于创建相对于当前脚本的文件和目录的绝对路径。它提供了一种在运行时确定当前文件目录的方法。在处理文件路径时,例如在 require 模块、读取或写入文件以及创建指向资源的相对路径时,__dirname 的值尤其有用。 语法它具有以下语法:
示例让我们以一个示例来说明 Node.js 中的 __dirname。 输出 Error reading file: 说明这个 Node.js 脚本演示了如何使用 __dirname 来一致地解析与脚本位于同一目录中的 data.txt 文件的路径。首先,导入所需的 path 和 fs(文件系统)模块。然后,使用 Path.join() 将目录路径与 'data.txt' 连接起来,在获取当前目录的绝对路径后构建完整的文件路径,这是使用 __dirname 全局变量完成的。该脚本然后使用 fs.readFile() 异步读取文件内容。如果发生错误(例如,文件不存在或无法打开),则会向控制台记录错误。如果读取操作成功,则会将文件内容打印到控制台。正如这个例子所示,由于 __dirname,文件可以被正确访问,无论脚本是从哪个工作目录执行的,这有助于解析相对于脚本位置的文件路径。 什么是 ./?./ 符号用于解析相对于 Node.js 进程启动位置的文件路径,它在 Node.js 中表示当前工作目录。它的工作方式类似于 process.cwd() 方法,该方法也返回 Node.js 进程启动时的工作目录路径。但是,process.chdir() API 会动态更改 ./ 的基本路径,这允许我们在脚本执行期间修改当前工作目录。 ./ 与 require() 方法的交互是其独特行为之一。require('./module') 中的 ./ 用于解析脚本执行时相对于当前工作目录的路径,而不是脚本文件本身的目录。因此,导入依赖于当前工作目录结构的模块效果很好。 然而,__dirname 提供当前正在执行的文件所在目录的绝对路径。当脚本文件和 Node.js 进程从同一目录启动时,./ 和 __dirname 可能会产生相似的结果。但是,当进程从不同目录启动时,它们会产生差异。./ 会适应工作目录,而 __dirname 则保持与文件位置一致,确保了可靠的文件路径解析。 这种区别对于维护 Node.js 应用程序中健壮且可预测的文件操作至关重要。 语法它具有以下语法: 参数
示例让我们以一个示例来说明 Node.js 中的 ./。 输出 __dirname: process.cwd(): ./ : filename: /index.js Directory of the current file: 说明这个 Node.js 程序演示了如何使用 path 等内置模块来获取不同的目录和文件路径信息。在导入 path 模块后,打印出 __dirname 的值,它表示当前脚本所在目录的绝对路径。此外,该程序会生成 process.cwd(),它显示当前工作目录,这可能与脚本的位置不符。使用 p.resolve("./"),它进一步解析 ./(当前目录的相对路径),并根据 Node.js 进程的启动路径生成一个绝对路径。然后,程序记录脚本本身的绝对路径 __filename。它使用 p.dirname(__filename) 显示正在执行脚本的目录名称进行比较。最后,它检查 __dirname 和 process.cwd() 是否不同,从而揭示了这两个值如何根据执行上下文而变化,尤其是在使用 process.chdir() 时。 Node.js 中 __dirname 和 ./ 的主要区别![]() Node.js 中 __dirname 和 ./ 之间有几个区别。主要区别如下:
结论总之,在 Node.js 中处理文件路径需要同时使用 __dirname 和 ./,尽管它们的功能因情况而异。对于需要可靠的跨目录引用的文件系统操作,__dirname 非常理想,因为它提供了当前脚本所在目录的确定性绝对路径。无论脚本从何处执行,该路径始终准确,因为它不受当前工作目录更改的影响。然而,使用 process.chdir(),./ 根据当前工作目录解析相对路径,而当前工作目录在运行时可能会发生变化。因此,./ 适用于必须相对于执行上下文解析路径的情况,特别是在导入模块时。 |
在 Node.js 中,vm.constants.DONT_CONTEXTIFY() 函数可以被确定为 vm,它的翻译是“虚拟机”。虚拟机 (vm) 模块允许 JavaScript 代码在一个与主执行环境隔离的上下文中运行。因此,可以运行潜在不受信任的程序...
阅读 3 分钟
Node.js 设计模式就像针对特定代码问题的解决方案草图。这意味着当开发人员在设计软件时遇到困难时,他们可能会遇到过这种类型的问题,并且在那时,他们可能已经查找过...
5 分钟阅读
Node.js 的 fs.unwatchFile() 方法对于处理文件系统和跟踪应用程序文件更改的开发人员来说是一个有用的实用工具。它来自 fs 模块,该模块拥有许多与文件系统操作相关的功能,例如读取、写入和文件监视。……
阅读 4 分钟
在 Node.js 中,tracker.reset([fn]) 函数允许您重置异步跟踪系统的状态,该系统由 async_hooks 模块构建。此跟踪器监控生命周期和异步操作。reset 选项允许您清除当前正在跟踪的所有资源...
阅读 4 分钟
在本文中,我们将讨论 Node.js 中的 util.getSystemErrorName() 方法,包括其主要功能、语法、参数和示例。什么是 Node.js util.getSystemErrorName() 方法? util.getSystemErrorName() 方法首次引入于 v9.7.0 版本,是 Node.js 内置 util 模块的一部分。它将数字系统错误码转换为名称...
阅读 4 分钟
在本文中,您将学习如何使用 Node.js 创建负载平衡服务器。在讨论其创建之前,您必须了解负载平衡及其功能、需求等。什么是负载平衡?它是将松散连接分配到多个服务器的实践...
阅读 4 分钟
简介 dns.getServers() 方法概述:dns.getServers() 方法是 Node.js DNS(域名系统)模块的一个基本部分,该模块提供了在 Node.js 应用程序中执行 DNS 相关操作的功能。具体来说,dns.getServers() 用于检索系统上配置的 DNS 服务器的 IP 地址...
阅读 15 分钟
在本文中,我们将讨论 Node.js console.timeLog() 方法的语法、参数、示例和优点。Node.js console.timeLog() 方法是什么?Node.js console.timeLog() 方法记录由先前 console.time() 调用启动的计时器的当前值。此技术有助于……
阅读 3 分钟
在 Node.js 应用开发中,灵活性和依赖管理至关重要。NPM(Node 包管理器)通过一组命令(例如 npm install 和 npm update)使这一点变得容易,每个命令都有其功能。使用 npm install,我们可以...
阅读 3 分钟
在本文中,您将了解 Node.js net.SocketAddress() 函数的语法、参数和示例。什么是 Node.js net.SocketAddress() 函数?在 Node.js 应用程序中,“net.SocketAddress()”类将提供一种结构化且标准化的方法来封装和管理套接字地址信息。许多网络任务,包括日志记录,...
5 分钟阅读
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India