process.cwd() 与 __dirname 的区别

Node.js 中的 __dirnameprocess.cwd() 都是用于获取文件系统路径的全局变量和方法,但它们有不同的含义和用途。

process.cwd() & __dirname

一、process.cwd()

  • process.cwd() 是一个方法,用于获取 Node.js 进程的当前工作目录。
  • 它返回的是 Node.js 进程启动时所在的工作目录的绝对路径。
  • 这个路径通常是在启动 Node.js 应用程序时指定的,或者是在命令行中运行 Node.js 时的当前目录。

示例代码:

// 输出 Node.js 进程的当前工作目录
console.log(process.cwd()); 

二、__dirname

  • __dirname 是一个特殊的全局变量,用于获取当前模块的目录名。
  • 它返回的是包含当前模块文件的目录的绝对路径。
  • 这个路径是相对于当前模块文件的位置的,所以它的值在不同模块中可能不同。

示例代码:

// 输出当前模块的目录路径
console.log(__dirname); 

三、不同情况下的差异

这两个变量在以下情况下可能会有不同的值:

  • 在不同模块中:

如果你在不同的模块中使用这两个变量,它们的值可能会不同,因为 __dirname 是相对于当前模块文件的目录,而 process.cwd() 是整个 Node.js 进程的当前工作目录。

  • 在不同进程中:

如果你的 Node.js 应用程序在不同的进程中运行,那么 process.cwd() 的值可能会不同,因为每个进程都有自己的工作目录。但是 __dirname 仍然是相对于当前模块的目录,因此在不同进程中可能是一致的。

  • 在不同的工作目录下启动应用程序:

如果你在不同的工作目录下启动 Node.js 应用程序,那么 process.cwd() 的值将取决于启动应用程序时的工作目录。而 __dirname 仍然是相对于当前模块的目录,不受启动目录的影响。

举例说明:

假设你的 Node.js 应用程序的目录结构如下:

app.js
scritps/- shell-01.js- shell-02.js
config/- config-01.js- config-02.js
package.json
.gitignore
.eslintrc.js

package.json 文件中的 scripts 字段配置如下:

{"scripts": {"start": "node app.js","shell-01": "node scripts/shell-01.js","config-01": "node config/config-01.js"}
}

相同的情况:执行 npm run start 时,在 app.js 中使用 __dirnameprocess.cwd() 获取的结果是一样的。
不用的情况:执行 npm run shell-01 时,在 shell-01.js 中 使用 __dirnameprocess.cwd() 获取的结果是不一样的。__dirname 获取的是 shell-01.js 所在的目录,而 process.cwd() 是启动目录(package.json 所在的目录)。

四、总结

__dirname 是相对于当前模块的目录,而 process.cwd() 是整个应用程序的当前工作目录,因此它们的值可能在不同上下文和不同模块中有所不同。你应该根据你的需求选择合适的变量。如果需要模块特定的路径信息,使用 __dirname;如果需要整个应用程序的当前工作目录,使用 process.cwd()。


欢迎访问:天问博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/593688.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java安装详细教程

文章目录 一、JDK 下载 和 安装1.1 选择 Java版本1.2 下载 JDK 二、 配置环境变量2.1 配置环境变量的原因2.2 配置环境变量2.3 验证配置是否成功 参考资料 一、JDK 下载 和 安装 1.1 选择 Java版本 访问 Oracle 官方网站的 Java 下载页面Java Archive | Oracle。 在 “Java …

用PHP搭建一个绘画API

【腾讯云AI绘画】用PHP搭建一个绘画API 大家好!今天我要给大家推荐的是如何用PHP搭建一个绘画API,让你的网站或应用瞬间拥有强大的绘画能力!无论你是想要让用户在网页上绘制自己的创意,还是想要实现自动绘画生成特效,这…

可以写作文的AI写作,看看这五款

随着人工智能技术的不断发展,AI写作软件逐渐走进了我们的生活,这些软件可以帮助我们快速生成高质量的作文,节省了大量的时间和精力。在市场上有许多种类的AI写作软件,下面我将介绍五款比较受欢迎的。 首先,我们来看看“…

进程的基础认识

一、进程的概念 进程是指 可执行程序 内核数据结构(内核为了管理进程而创建的数据结构)。 二、进程的管理 进程是靠PCB(process control block [进程控制块])管理起来的,在linux下PCB叫 task_struct 当一个可执行程序从磁盘加载进内存&…

HTTP 错误 401.3 - Unauthorized 由于Web服务器上此资源的访问控制列表(ACL)配置或加密设置。

用IIS 发布网站,不能访问且出现错误: HTTP 错误 401.3 - Unauthorized 由于Web服务器上此资源的访问控制列表(ACL)配置或加密设置。您无权查看此目录或页面 解决办法: 1.打开IIS界面,选中发布的网站,右键—>编辑…

【Java 基础】-- 实例化

1、定义 创建对象的过程就叫实例化。这个过程中会在堆中开辟内存,将一些非静态的方法,变量存放在里面。在程序执行的过程中,可以创建多个对象,既多次实例化。每次实例化都会开辟一块新的内存。 2、实例化的几种方法 new 关键字创…

bootstrap5实现的在线商城网站Parlo

一、需求分析 在线商城网站是指基于互联网技术搭建的电子商务平台,通过网站提供商品和服务的展示、销售和交易功能。它的主要作用包括以下几个方面: 商品展示和销售:在线商城网站是商家展示商品的平台,可以通过图片、文字、视频等…

水经微图IOS版APP正式上线!

水经微图APP(简称“微图APP”)IOS版已正式上线! 微图IOS版APP下载安装 节后上班第一天,同事说微图APP通过了苹果应用商店审核,已经上线了。 于是迫不及待地打开 App Store 搜索“水经微图”,但并没有搜索…

uniapp中组件库的Radio 单选框丰富的使用方法

目录 #平台差异说明 #基本使用 #自定义形状 #禁用radio #是否禁止点击提示语选中复选框 #自定义颜色 #横向排列形式 #横向两端排列形式 API #Radio Props #radioGroup Props #radio Event #radioGroup Event 单选框用于有一个选择,用户只能选择其中一个…

C++ DAY6 作业

1.用模板类写顺序表 #include <iostream>using namespace std;#define MAXSIZE 10 template <typename T> class Arr {T *data NULL;int len 0; public://构造函数Arr():data(new T){}Arr(T a,int len):data(new T(a)),len(len){}//析构函数~Arr(){delete data;}…

【elfboard linux开发板】4. 文件点灯与创建多进程

ps&#xff1a;提升效率的小tips&#xff1a; 灵活运用vim操作命令&#xff0c;gg快速跳转到文件开头&#xff0c;G跳转到结尾 多行操作 ctrl V shift i 插入修改内容 esc退出编辑 sudo vi /etc/vim/vimrc 在文件中添加如下内容省略重复工作&#xff1a; autocmd BufNewFile …

霹雳吧啦Wz《pytorch图像分类》-p3VGG网络

《pytorch图像分类》p3VGG网络详解及感受野的计算 一、零碎知识点1.nn.Sequential2.**kwargs 二、VGG网络模型详解1.感受野2.模型手算 三、代码1.module.py2.train.py3.predict.py 一、零碎知识点 论文连接&#xff1a;VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAG…

结算时间和可组合性助力Sui上DeFi蓬勃发展

结算时间是基于Sui交易处理模型的度量标准&#xff0c;确保DeFi用户几乎立即看到交易结果。可组合性则是深深融入Sui的编程环境&#xff0c;扩展了其对对象和智能合约的影响。Sui深度的可组合性赋予DeFi构建者引入创新产品的能力&#xff0c;使其在其他区块链上的DeFi应用中独树…

[C#]使用onnxruntime部署Detic检测2万1千种类别的物体

【源码地址】 github地址&#xff1a;https://github.com/facebookresearch/Detic/tree/main 【算法介绍】 Detic论文&#xff1a;https://arxiv.org/abs/2201.02605v3 项目源码&#xff1a;https://github.com/facebookresearch/Detic 在Detic论文中&#xff0c;Detic提到…

2023.12.27 关于 Redis 数据类型 List 常用命令

目录 List 类型基本概念 List 类型特点 List 操作命令 LPUSH LPUSHX RPUSH RPUSHX LRANGE LPOP RPOP LINDEX LINSERT LREM LTRIM LSET 阻塞版本的命令 阻塞版本 和 非阻塞版本的区别 BLPOP & BRPOP List 类型基本概念 Redis 中的列表&#xff08;list&am…

定时器PWM控制RGB彩灯案例

1.脉冲宽度调制PWM PWM&#xff08;Pulse Width Modulation&#xff09;简称脉宽调制&#xff0c;是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术&#xff0c;广泛应用在测量、通信、工控等方面。   PWM的一个优点是从处理器到​​ ​被控系统​​​信号…

x-cmd pkg | bit - 实验性的现代化 git CLI

目录 简介首次用户功能特点竞品和相关作品进一步探索 简介 bit&#xff0c;由 Chris Walz 于 2020 年使用 Go 语言开发&#xff0c;提供直观的命令行补全提示和建立在 git 命令之上的封装命令&#xff0c;旨在建立完全兼容 git 命令的现代化 CLI。 首次用户 使用 x bit 即可自…

test ui-03-cypress 入门介绍

cypress 是什么&#xff1f; 简而言之&#xff0c;Cypress 是一款专为现代Web构建的下一代前端测试工具。我们解决了开发人员和质量保证工程师在测试现代应用程序时面临的关键问题。 我们使以下操作成为可能&#xff1a; 设置测试编写测试运行测试调试测试 Cypress经常与Se…

使用宝塔在Linux面板搭建网站,并实现公网远程访问

文章目录 前言1. 环境安装2. 安装cpolar内网穿透3. 内网穿透4. 固定http地址5. 配置二级子域名6. 创建一个测试页面 前言 宝塔面板作为简单好用的服务器运维管理面板&#xff0c;它支持Linux/Windows系统&#xff0c;我们可用它来一键配置LAMP/LNMP环境、网站、数据库、FTP等&…

如何在anaconda里安装basemap和pyproj库

当直接使用conda命令进行安装basemap和pyproj库时&#xff0c;会出现版本不对应的报错问题(如下图)&#xff0c;所以此篇博客用以展示如何安装basemap和pyproj库 题主默认使用的anaconda源已经切换成了清华大学源&#xff0c;但是仍然会出现报错&#xff0c;所以不是源的问题&a…