__dirname和__filename
1. 概念
__dirname
可以用来动态获取当前文件所属目录的绝对路径__filename
可以用来动态获取当前文件的绝对路径,包含当前文件__dirname
和__filename
是不受执行node命令所属路径影响的
2. 代码演示
目录结构
app.js文件,使用node app.js
命令执行app.js文件
console.log(__dirname); //D:\code\frontend\nodeProject\testconsole.log(__filename); //D:\code\frontend\nodeProject\test\app.js
foo文件夹下的 a.txt 文件中只有一个字符串hello aaa
foo文件夹下的 index.js 文件:
let fs = require('fs');
let path = require('path');//读取 a.txt 文件,注意此处使用的是相对路径 './a.txt'
fs.readFile('./a.txt','utf-8',function (err,data) {if (err) {throw err}console.log(data);
})
2.1 测试
- 如果我们通过终端在 foo 文件目录中执行 foo 文件夹下的 index.js 文件,那么上边的代码是没有任何问题的。
- 但是,如果我们在 test 目录下通过
node foo/index.js
命令执行 foo 文件夹下的 index.js 文件,上边的代码就会报错。
报错信息显示在test文件夹下找不到 a.txt 文件。
2.2 背后原因
当我们进行文件操作,使用相对路径时,此处的“相对”指的是相对于执行node命令所在的路径。
也就是说上边的代码,当我们在 test 目录下使用 node 命令去执行 foo 文件夹下的 index.js 文件(我们在该文件中使用了相对路径
./a.txt
), 那么就会去 test 目录下寻找 a.txt 文件,而不是去 foo 目录中寻找。
- 注意:这不是错误,Node就是这样设计的,文件操作中,相对路径设计的就是相对于执行node命令所处的路径
- 所以文件操作中,使用相对路径是不可靠的
- 为了解决这个问题,只需要把相对路径变为 动态的绝对路径,
__dirname
此时就派上了用场
2.3 改进代码
let fs = require('fs');
let path = require('path');//引入path模块//使用 path 的 join 方法将两个路径拼接起来
fs.readFile(path.join(__dirname,'./a.txt'),'utf-8',function (err,data) {if (err) {throw err}console.log(data);
})
此时不管我们在那个目录下执行index.js,它都可以正常运行。
注意: 当我们导入自己编写的模块时,使用了相对路径,那么该相对于谁就相对于谁,这里的路径标识和文件操作过程中的路径没有关系。
前端学习交流QQ群,群内学习讨论的氛围很好,大佬云集,期待您的加入:862748629 点击加入
__dirname和__filename相关推荐
- 关于 __dirname和__filename介绍以及使用场景
在每个模块中除了 require ,exports 等模块相关 API之外,还有两个特殊的成员: __dirname:用来动态获取当前文件模块所属目录的绝对路径 __filename:用来动态获取当前 ...
- __dirname与__filename
(1) __filename变量 node.js中,在任何模块文件内部,可以使用__filename变量获取当前模块文件的带有完整绝对路径的文件名. 在应用程序根目录下新建app.js文件,其中代码如 ...
- node中全局对象一 --- __dirname和__filename
__dirname:全局变量,存储的是文件所在的文件目录 __filename:全局变量,存储的是文件名 如在webstorm下执行结果
- ESLint 配置说明
ESLint 有什么用,为什么要使用? ESLint 是一套可自定义规则的JS代码检查与修复工具 目标是保存团队代码的一致性和避免错误并且修复错误.减少团队沟通成本 "no-alert&qu ...
- Nexus.js介绍:一个多线程的JavaScript运行库
首先,如果你不熟悉这个项目,建议先阅读之前写的一系列文章.如果你不想阅读这些,不用担心.这里面也会涉及到那些内容. 现在,让我们开始吧. 去年,我开始实现Nexus.js,这是一个基于Webkit/J ...
- 前端代码规范(es6,eslint,vue)
2019独角兽企业重金招聘Python工程师标准>>> 前端开发规范 一.HTML 1.语义化标签 HTML5 提供了很多语义化元素,更好地帮助描述内容.希望你能从这些丰富的标签库中 ...
- Eslint配置文件 `.eslintrc.js`
2019独角兽企业重金招聘Python工程师标准>>> module.exports = {// 如果有多个目录有.eslintrc.js配置文件,并且配置了此项,则不会再父级目录中 ...
- 如何使用Node.js获取当前脚本的路径?
我如何获得Node.js中脚本的路径? 我知道有process.cwd ,但这只是指调用脚本的目录,而不是脚本本身. 例如,假设我在/home/kyle/运行以下命令: node /home/kyle ...
- vue-cli eslint 规则
"no-alert": 0,//禁止使用alert confirm prompt "no-array-constructor": 2,//禁止使用数组构造器 & ...
最新文章
- 中医点滴 1 --- 冬季外感喉咙痛 寒性荨麻疹
- linux iptables规则组成及用法
- python爬虫软件-8个最高效的Python爬虫框架,你用过几个?
- SVN中update to revision与revert to revision的区别
- python演示验证图像叠加过程_Python叠加矩形框图层2种方法及效果代码实例
- js怎么实现对html代码加密解密,javascript脚本加密解密及HTML转JS
- 万字详解Lambda、Stream和日期
- hdu4848 求到达每一个点总时间最短(sum[d[i]])。
- Apollo灰度发布
- Hexo NexT主题添加点击爱心效果
- hadoop2.9.2安装hadoop_pid_dir_Hadoop3.2 +Spark3.0全分布式安装
- 09年网络工程师考试大纲
- Android fastboot下载模式或reboot流程解析
- 铁打的春晚,流水的流量
- Windows如何设置夜间模式(护眼模式)超简单
- I Sold Out for the Cash - 2022/8/10
- 5款网络故障排除软件
- 周灏:金融大数据量化信用
- Unity学习场景、模型和粒子资源包,总有一款你能用到,亲测可使用,第一波来袭
- 线条的样式solid dotted dashed
热门文章
- html z-index 设置无效,css z-index属性不起作用的原因及解决方法
- 预防死锁,检测死锁,避免死锁,解除死锁....
- CSS 属性 columns
- 字符串的输入输出及字符串函数
- appium使用简记
- 敏捷转型(2)——企业文化
- setCapture和releaseCapture的小应用
- wald检验_Stata: 面板 Granger 因果检验
- python 工程进度计划_从零开始的项目实战(7)——项目进度述职报告
- linux 去掉终端控制符,Linux终端显示控制字符