概要

Node.js 中,__dirname 总是指向被执行 js 文件的绝对路径,所以当你在 /d1/d2/myscript.js 文件中写了 __dirname, 它的值就是 /d1/d2 。

相反,./ 会返回你执行 node 命令的路径,例如你的工作路径。

有一个特殊情况是在 require() 中使用 ./ 时,这时的路径就会是含有 require() 的脚本文件的相对路径。

例如

假设有如下目录结构

/dir1
/dir2
pathtest.js

然后在 pathtest.js 中,有如下代码

var path = require("path");
console.log(". = %s", path.resolve("."));
console.log("__dirname = %s", path.resolve(__dirname));

然后执行了下面命令

cd /dir1/dir2
node pathtest.js

将会得到

. = /Users/newuser/zdx/dir1/dir2
__dirname = /Users/newuser/zdx/dir1/dir2

. 是你的当前工作目录,在这个例子中就是 /dir1/dir2 ,__dirname 是 pathtest.js 的文件路径,在这个例子中就是 /dir1/dir2

然而,如果我们的工作目录是 /dir1

cd /dir1
node dir2/pathtest.js

将会得到

. = /Users/newuser/zdx/dir1
__dirname = /Users/newuser/zdx/dir1/dir2

此时,. 指向我们的工作目录,即 /dir1, __dirname 还是指向 /dir1/dir2 。

在 require 中使用 .

如果在 dir2/pathtest.js 中调用了 require 方法,去引入位于 dir1 目录的 js 文件,你需要写成

require('../thefile')

因为 require 中的路径总是相对于包含它的文件,跟你的工作目录没有关系。

node上的__dirname和./的区别的更多相关文章

  1. Node.js 中 __dirname 和 ./ 的区别

    概要 __dirname 总是指向被执行 js 文件的绝对路径 在 /d1/d2/myscript.js 文件中写了 __dirname, 它的值就是 /d1/d2 . ./ 会返回你执行 node ...

  2. HTTP的长连接和短连接——Node上的测试

        本文主要从实践角度介绍长.短连接在TCP层面的表现,借助Node.JS搭建后台服务,使用WinHTTP.Ajax做客户端请求测试,最后简单涉及WebSocket.     关键字:长连接.短连 ...

  3. kubernetes 每个node上只能运行一个副本DaemonSet

    每个node上只能运行一个副本: apiVersion: extensions/v1beta1 kind: DaemonSet #使用DaemonSet的方式运行 metadata: name: ku ...

  4. 集群中节点(Node)与单机数据库的区别

    集群中节点(Node)与单机数据库的区别: 区别项 集群中节点(Node) 单机数据库 只能使用0号数据库 是 都可以使用

  5. kubernetes:用label让pod在指定的node上运行(kubernetes1.18.3)

    一,为什么要为node指定label? 通常scheduler会把pod调度到所有可用的Node,有的情况下我们希望能把 Pod 部署到指定的 Node, 例如: 有的Node上配备了速度更快的SSD ...

  6. 我们可以定向调度某个pod在某个node上进行创建

    集群环境:1.k8s用的是二进制方式安装 2.操作系统是linux (centos)3.操作系统版本为 7.2/7.4/7.94.k8s的应用管理.node管理.pod管理等用rancher.k8s令 ...

  7. 【云计算】K8S DaemonSet 每个node上都运行一个pod

    Kubernetes容器集群中的日志系统集成实践 Kubernetes是原生的容器编排管理系统,对于负载均衡.服务发现.高可用.滚动升级.自动伸缩等容器云平台的功能要求有原生支持.今天我分享一下我们在 ...

  8. 关于Node.js的__dirname,__filename,process.cwd(),./文件路径的一些坑

    探索 计算机不会欺骗人,一切按照规则执行,说找不到这个文件,那肯定就是真的找不到,至于为什么找不到,那就是因为我们理解有偏差,我最初理解的'./'是当前执行js文件所在的文件夹的绝对路径,然后Node ...

  9. node上截取图片工具 images(node-images)

    我们经常会遇到服务器上传的图片进行裁剪或者增加logo等等一些操作,在node平台上该如何实现呢? 看到大家都在使用"gm"这个工具,功能很强大,但是在Windows平台上简直就是 ...

随机推荐

  1. POJ 3356 水LCS

    题目链接: http://poj.org/problem?id=3356 AGTC Time Limit: 1000MS   Memory Limit: 65536K Total Submission ...

  2. 如何取得SharePoint Timer Job的历史成功数和失败数,并按照日期计算排列

    [问题]. 如何取得SharePoint Timer Job的历史成功数和失败数,并按照日期计算排列 [分析] 管理中心只是罗列了所有job的历史和上一次是否成功,没有关于成功和失败的统计数据 [解决 ...

  3. php基础知识考察点:自定义函数及内部函数考察点

    1.变量的作用域和静态变量 函数的参数以及参数的引用传递 函数的返回值以及引用返回 外部文件的导入 系统内置函数的考察 变量的作用域也称为变量的范围,变量的范围即他定义上下文的背景(也是它生效的范围) ...

  4. Source Insight 创建工程(linux-2.6.22.6内核源码)

    1. 软件设置 安装完Source Insight,需要对其进行设置添加对“.S”汇编文件的支持: 2. 新建linux-2.6.22.6工程 1)选择工程存放的路径: 2)下载linux-2.6.2 ...

  5. python科学计算和可视化学习报告

    一丶numpy和matplotlib学习笔记 1. NumPy是Python语言的一个扩充程序库.支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库.Numpy内部解除了Pyth ...

  6. 深入虚拟内存(Virtual Memory,VM)

    我们应该知道物理内存(Physical Memory)指的是硬件上的内存,即 RAM.它通常指的是插在主板上的内存条,给进程提供临时数据存储的设备.因为 CPU 可以直接从物理内存中读取数据和指令,所 ...

  7. Subsonic 介绍

    SubSonic:一个数据层构建器(BLL) 导言 一 个易维护的应用程序,不同的类之间有不同的分工,通常分为界面层.业务层和数据访问层.虽然这一技术有利于更好地组织应用,一些开发人员不愿这么做.创建 ...

  8. VirtualBOX启动错误the vm session was closed before any attempt to power it on解决办法

    昨天晚上笔记本休眠后,今天早上启动vm时,报错了. 点击详细启动错误:the vm session was closed before any attempt topower it on. 解决办法: ...

  9. 使用LINQ的Skip和Take函数分批获取数据

    Skip函数和Take函数是System.Linq对类Enumberable的扩展, 其中Skip函数是跳过序列中的前n个数据,参数为需要跳过的数据量, Take函数是取序列中的n个数据,参数为要获取 ...

  10. Design2:使用HierarchyID构建数据的分层结构

    1,传统的分层结构是父子结构,表结构中有一个ParentID字段自引用表的主键,表示“归属”关系,例如 create table dbo.emph ( ID int not null primary ...