当前位置: 首页 > news >正文

(包清楚解疑)ES6中__dirname和__filename不见了吗?,到底怎么用

我们知道,在commonJs中,__dirname和__filename分别表示当前js文件所在目录路径和所在路径的绝对路径。可以直接使用,但是在ES6和Node v20.11.0之后,不能直接用了。

首先明确一下这两个变量为什么会用到:

当我们在使用Node进行读写文件的操作的时候,如果代码中使用的是相对目录(不使用这两个变量的时候),我们在用node命令运行代码的时候,会拼接node命令执行的目录和代码中的相对目录,假设我们随便找个目录(假设为E盘根目录),使用node .\nodeex\readAndWriteFile时,会拼接根目录(E)和'成绩.txt'就会出问题,如下图

只有当node命令和要执行的js文件在一个目录下,才会成功,如下图

这样很容易出错,那如果使用绝对路径呢?是没有任何问题的,但是可移植性太差了,而且会出现很长的一串路径,并且绝对路径每个文件夹连接的时候用的是'\\',非常不利于维护,如下图:

那有没有一种办法可以解决上面两种问题呢,有的,xd有的,在commonJs中,可以直接使用__dirname+相对路径的方法。

但是在ES6中,不能直接使用,需要从path中引入dirname,同时使用路径的时候最好不要直接拼接,可以使用join方法,完整代码奉上:

import { readFile, writeFile } from 'fs'
import { dirname, join } from 'path'
import { fileURLToPath } from 'url'

const __dirname = dirname(fileURLToPath(import.meta.url))
readFile(join( __dirname,'../成绩.txt'), 'utf8', (err, data ) => {
    if( err ) {
        return console.log(err.message)
    }
    const oldData = data.split(' ')
    const newData = []
    oldData.forEach( item =>{
        newData.push(item.replace('=', ':'))
    })
    writeFile(join(__dirname,'../成绩-ok.txt'), newData.join('\r\n'), 'utf8', (err) => {
        if( err) {
            return console.log(err.message)
        }
        console.log('写入成功!')
    })
})

那么__filename也是这样

相关文章:

  • 从零到精通文本指令:打造个人AI助理的完整指令库(Prompt 指令实操)
  • IIC协议-HAL库
  • 在微信小程序或前端开发中,picker 和 select 都是用户交互中用于选择的组件,但它们在功能、设计和使用场景上有一定的区别
  • StarRocks + Paimon 在阿里集团 Lakehouse 的探索与实践
  • go回调函数的使用
  • 分而治之:用于 RGB-T 显著目标检测的 Confluent Triple-Flow 网络(问题)
  • 基于Babylon.js的Shader入门三(让Shader中的纹理动起来)
  • Jmeter的简单使用
  • STM32-SPI通信外设
  • Python 与 JavaScript 交互及 Web 逆向分析全解析
  • 3D文物线上展览如何实现?
  • 一些docker命令
  • L1正则化与L2正则化的区别
  • DataWhale 大语言模型 - 大模型技术基础
  • 数据库技术
  • EB-Cable许可与软件版本兼容性的关系
  • 常见的企业软件和工业软件种类
  • Springboot中的异常处理
  • 棒球和垒球区别·棒球1号位
  • Marp 高效 Markdown 幻灯片制作指南
  • 又是“9+2”复式票,浦东退休阿姨擒大乐透1153万头奖
  • 再囤三个月库存!美国客户抢付尾款,外贸企业发货订单排到7月
  • 世卫大会再次拒绝涉台提案,国台办:民进党当局再遭挫败理所当然
  • 一季度支持科技创新和制造业发展减税降费及退税4241亿元
  • 历史缝隙里的人︱觑功名如画饼:盛世“做题家”的攀爬与坠落
  • IPO周报|本周2只新股申购,比亚迪、上汽“小伙伴”来了